Aujourd’hui, on va voir un article très simple (niveau unix débutant)
c’est un template relativement court mais bougrement pratique et qui sert assez régulièrement.
Ce script permet de lancer ses programmes via /etc/init.d et de fournir les commandes par défaut start/stop/restart comme pour n’importe quel daemon linux.
Voilà ce que ça donne :
#!/bin/bash # myapp daemon # description: myapp daemon # processname: myapp NAME=myapp DESC="My daemon description" DAEMON_PATH="/home/prod/myapp" DAEMON=myapp DAEMONOPTS="-my opts" PIDFILE=/var/run/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME case "$1" in start) printf "%-50s" "Starting $NAME..." cd $DAEMON_PATH PID=`$DAEMON $DAEMONOPTS > /dev/null 2>&1 & echo $!` if [ -z $PID ]; then printf "%s\n" "Fail" else echo $PID > $PIDFILE printf "%s\n" "Ok" fi ;; status) printf "%-50s" "Checking $NAME..." if [ -f $PIDFILE ]; then PID=`cat $PIDFILE` if [ -z "`ps axf | grep ${PID} | grep -v grep`" ]; then printf "%s\n" "Process dead but pidfile exists" else echo "Running" fi else printf "%s\n" "Service not running" fi ;; stop) printf "%-50s" "Stopping $NAME" PID=`cat $PIDFILE` cd $DAEMON_PATH if [ -f $PIDFILE ]; then kill -HUP $PID printf "%s\n" "Ok" rm -f $PIDFILE else printf "%s\n" "pidfile not found" fi ;; restart) $0 stop $0 start ;; *) echo "Usage: $0 {status|start|stop|restart}" exit 1 esac
Vous avez donc juste à modifier le path, le nom de l’app et la description et le script devrait fonctionner (il faut parfois jouer du sudo pour avoir les droits /var/run/).
Une fois en place, vous pouvez maintenant lancer votre script via /etc/init.d/myapp start et l’arrêter via /etc/init.d/myapp stop.
P.S. du 17 septembre : Shimata /o\, on m’informe à posteriori que sur debian, il existe un /etc/init.d/skeleton
C’est un template assez similaire à celui que je propose ci-dessus mais qui se base sur l’utilitaire start-stop-daemon
Je laisse l’article à titre informatif, mais je vous encourage vivement à utiliser ce skeleton tout fait plutôt que mon script custom.
Trackbacks