J'ai un script shell, qui est essentiellement une ligne avec une journalisation, que j'essaie d'exécuter à partir d'un script init. J'utilise la daemon
fonction à l'intérieur de /etc/init.d/functions
pour l'exécuter, car Redhat ne semble pas être start-stop-daemon
disponible. Lorsque j'appelle le script init ( /etc/init.d/script start
), il reste au premier plan, plutôt que de terminer et de laisser le processus en cours. Quelle est la bonne façon pour moi de faire démoniser ce script?
Script à exécuter:
# conf file where variables are defined
. /etc/script.conf
echo "Starting..." | logger -i
echo "Monitoring $LOG_LOCATION." | logger -i
echo "Sending to $MONITOR_HOST:$MONITOR_PORT." | logger -i
tail -n 1 -F $LOG_LOCATION |
grep WARN --line-buffered |
/usr/bin/nc -vv $MONITOR_HOST $MONITOR_PORT 2>&1 |
logger -i
script d'initialisation:
#!/bin/bash
# Source Defaults
. /etc/default/script
# Source init functions
. /etc/init.d/functions
prog=/usr/local/bin/script.sh
[ -f /etc/script.conf ] || exit 1
RETVAL=0
start()
{
# Quit if disabled
if ! $ENABLED; then
echo "Service Disabled in /etc/default/script"
exit 1
fi
echo "Starting $prog"
daemon $prog
RETVAL=$?
return $RETVAL
}
stop ()
{
echo -n $"Stopping $prog: "
killproc $prog
RETVAL=$?
return $RETVAL
}
reload()
{
echo "Reload command is not implemented for this service."
return $RETVAL
}
restart()
{
stop
start
}
condrestart()
{
echo "Not Implemented."
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $prog
;;
restart)
restart
;;
reload)
reload
;;
condrestart)
condrestart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}"
RETVAL=1
esac
~ 20 dernières lignes d'exécution avec bash -vx:
+ case "$1" in
+ start
+ true
+ echo 'Starting /usr/local/bin/script.sh'
Starting /usr/local/bin/script.sh
+ daemon /usr/local/bin/script.sh
+ local gotbase= force=
+ local base= user= nice= bg= pid=
+ nicelevel=0
+ '[' /usr/local/bin/script.sh '!=' /usr/local/bin/script.sh ']'
+ '[' -z '' ']'
+ base=script.sh
+ '[' -f /var/run/script.sh.pid ']'
+ '[' -n '' -a -z '' ']'
+ ulimit -S -c 0
+ '[' -n '' ']'
+ '[' color = verbose -a -z '' ']'
+ '[' -z '' ']'
+ initlog -q -c /usr/local/bin/script.sh
daemon
, il existe également un package RPM . Btw, il existe de nombreux outils de surveillance des journaux ( commencez ici ).
#!/bin/bash -vx
? J'ai essayé de le faire, mais cela ne produisait pas la même sortie du script init que si j'exécutais le script shell directement.
bash -vx
, c'est-à-dire. bash -vx /etc/init.d/script start
.
bash -vx ...
et de publier les dernières lignes afin que nous puissions voir ce qui reste au premier plan.