Eseguire un programma come daemon da un initscript
Jump to navigation
Jump to search
- Utilizzando start-stop-daemon disponibile in stock Debia, non si ha la possibilità di fare il respwan automatico del daemon, in caso termini.
- Utilizzando libslack daemon, è possibile utilizzare molte più opzioni, tra cui il respawn
- Installarlo:
sudo apt-get install daemon
- Ad esempio, per far partire un programma come daemon, lasciandolo in foreground per test:
/usr/bin/daemon --foreground --name=netxetender --respawn --delay=10 --errlog=daemon.err --dbglog=daemon.debug --output=daemon.info --verbose --inherit --chdir=/root -- /usr/sbin/netExtender -u US -p PASS -d domain server.example.com:4433
- --foreground non mete il comando in background, per fare i test
- --name imposta il nome del daemon. Utile per stopparlo ins eguito e come tag dei messaggi in syslog
- --respawn fa si che se l'eseguibile si interrompe, venga rilanciato. Provare a fare CTRL-C e si vedrà che verrà rilanciato il comando
- --delay riavia il comando dopo un'attesa di x secondi
- --errolog invia a syslog gli errori con priorià abc.def
- --dbglog invia il debug a syslog
- --output: invia stdout e stderr a syslog
- --verbose aumenta il logging
- --inherit eredita tutte le variabili di ambiente
- --chdir si sposta nella directory indicata prima di eseguire il comando
- -- percorso/eseguibile -opzioni lancia il comando con le raltive opzioni
- Fermare quindi il comando precedente con
/usr/bin/daemon --stop --name=netxetender
- Ecco un esempio di script:
#! /bin/sh
### BEGIN INIT INFO
# Provides: netextender
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: NetExtender VPN Daemon
### END INIT INFO
set -e
export HOME="/root"
# /etc/init.d/netextender: start and stop the NetExtender daemon
test -x /usr/sbin/netExtender || exit 0
umask 022
. /lib/lsb/init-functions
if test -f /etc/default/netextender; then
. /etc/default/netextender
NETEXT_OPTS=" --dns-only-local -u ${NETEXT_USERNAME} -p ${NETEXT_PASSWORD} -d ${NETEXT_DOMAIN} ${NETEXT_SERVER}"
else
log_action_msg "Default file not present. Aborting" || true
exit 0
fi
if [ -n "$2" ]; then
NETEXT_OPTS="$NETEXT_OPTS $2"
fi
# Are we running from init?
run_by_init() {
([ "$previous" ] && [ "$runlevel" ]) || [ "$runlevel" = S ]
}
export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"
case "$1" in
start)
log_daemon_msg "Starting NetExtender daemon" "netextender" || true
#if start-stop-daemon --start --background --exec /usr/sbin/netExtender -- ${NETEXT_OPTS}; then
if /usr/bin/daemon --name=netxetender --respawn --delay=10 --errlog=daemon.err --dbglog=daemon.debug --output=daemon.info --verbose --inherit --chdir=/root -- /usr/sbin/netExtender ${NETEXT_OPTS}; then
log_end_msg 0 || true
else
log_end_msg 1 || true
fi
;;
stop)
log_daemon_msg "Stopping Netextender daemon" "netextender" || true
#if start-stop-daemon --stop --retry 30 --exec /usr/sbin/netExtender -- ${NETEXT_OPTS}; then
if /usr/bin/daemon --stop --name=netxetender; then
log_end_msg 0 || true
else
log_end_msg 1 || true
fi
;;
status)
log_daemon_msg "Checking NetExtender daemon" "netextender" || true
if /usr/bin/daemon --running --name=netxetender; then
log_end_msg 0 || true
else
log_end_msg 1 || true
fi
;;
*)
log_action_msg "Usage: /etc/init.d/netextender {start|stop|status}" || true
exit 1
esac
exit 0