
Tengo la tarea de diseñar un servicio a partir de un script bash para poder llamarlo de la forma en que el servicio... inicia/detiene/reinicia.
El script que se convertirá en un servicio es un bucle while infinito que se activa cada minuto y realiza algunas comprobaciones. Yo lo llamo así:
start() {
echo -n $"Starting $DESC:"
DAEMON_ARGS=$(xmlstarlet sel -T -t -m "/config/input/sensor/device/resource" -v "concat(../../@type, ' ', ../../@dev, ' ', @res)" -n $CONFIGURATION_FILE | extract_devices) # get device names out of XML file
echo "daemon args $DAEMON_ARGS"
start-stop-daemon --start --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
echo}
pid y daemon se definen así:
PIDFILE="/var/run/detection.pid"
NAME="jblub_control_loop.sh"
DAEMON="/root/test_det/${NAME}"
cuando corro
./detection start (también intenté copiar en init.d y ejecutar con el inicio de detección del servicio)
El script de inicio simplemente no sale del bucle y permanece bloqueado en la función start-stop-daemon. Cuando comento el bucle while infinito dentro de mi jblub_control_loop.sh, pasa pero no se crea ningún archivo pid.
Mi pregunta es cómo iniciar correctamente el script con un bucle infinito como servicio y por qué no se crea mi archivo pid.
Respuesta1
Para comenzar,
use el modificador --background para que se bifurque. use el modificador -m para crear un archivo PID
start-stop-daemon --start --background -m --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
Para obtener una respuesta completa, consultehttps://stackoverflow.com/questions/16139940/what-is-start-stop-daemon-in-linux-scripting
Disfrutar