Eseguire un programma come daemon da un initscript: Difference between revisions

From RVM Wiki
Jump to navigation Jump to search
Created page with "*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,..."
 
(No difference)

Latest revision as of 14:12, 29 January 2016

  • 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