Tengo un script de shell, que es esencialmente un trazador de líneas con algún registro, que estoy tratando de ejecutar esto desde un script de inicio. Estoy usando la daemon
función dentro de /etc/init.d/functions
para ejecutarlo, ya que Redhat no parece tener start-stop-daemon
disponible. Cuando llamo al script de inicio ( /etc/init.d/script start
) permanece en primer plano, en lugar de completar y dejar el proceso en ejecución. ¿Cuál es la forma correcta para mí de demonizar este script?
Script a ejecutar:
# 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
guión de inicio:
#!/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
Últimas ~ 20 líneas de ejecución con 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
, también hay un paquete RPM . Por cierto, hay muchas herramientas de monitoreo de registros por ahí ( comience aquí ).
#!/bin/bash -vx
? Intenté hacer esto, pero no produjo el mismo resultado del script de inicio que si ejecuto el script de shell directamente.
bash -vx
, es decir. bash -vx /etc/init.d/script start
.
bash -vx ...
y publique las últimas líneas para que podamos ver lo que queda en primer plano.