date: 12 Jun 2010 title: Checker la syntaxe automatiquement avant un restart de Lighttpd tags: lighttpd, planet-libre Une petite astuce qui simplifie beaucoup la vie :) Quoi de plus énervant que de redémarrer son serveur web après avoir tweaker sa config et de se faire jeter à causse d'une erreur de syntaxe. Surtout que pendant que vous corriger l'erreur dans le fichier, votre serveur web est down ; un temps de disponibilité bêtement perdu. Alors heureusement, il existe avec la plupart des serveurs web une commande pour vérifier la syntaxe de la conf (lighttpd -t -f config_file sous Lighttpd et apache2ctl configtest sous Apache2). Mais il faut penser à l'exécuter avant chaque redémarrage, ce qui peut devenir très lourd, c'est pourquoi j'ai eu l'idée de l'intégrer dans le script d'init de Lighttpd. Avant chaque restart ou reload du serveur, il fera un test de la configuration et ne redémarrera que si elle est correcte. Voici à quoi ressemble le nouveau script d'init de lighttpd sous Debian (uniquement les cas reload et restart) : reload) log_daemon_msg "Checking $DESC configuration file" if $DAEMON -t $DAEMON_OPTS then log_daemon_msg "Reloading $DESC configuration" $NAME if start-stop-daemon --stop --signal 2 --oknodo --retry 30 --oknodo \ --quiet --pidfile $PIDFILE --exec $DAEMON then if start-stop-daemon --start --quiet \ --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS ; then log_end_msg 0 else log_end_msg 1 fi else log_end_msg 1 fi fi ;; restart|force-reload) log_daemon_msg "Checking $DESC configuration file" if $DAEMON -t $DAEMON_OPTS then $0 stop test -r $PIDFILE && while pidof lighttpd | \ grep -q `cat $PIDFILE 2>/dev/null` 2>/dev/null ; do sleep 1; done $0 start fi ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 exit 1 ;; Ou voici le patch (sans l'adaptation de l'indentation pour plus de lisibilité) si vous préférez : --- lighttpd.old 2010-06-11 23:42:57.000000000 +0200 +++ /etc/init.d/lighttpd 2010-06-11 23:21:18.000000000 +0200 @@ -54,6 +54,9 @@ fi ;; reload) + log_daemon_msg "Checking $DESC configuration file" + if $DAEMON -t $DAEMON_OPTS + then log_daemon_msg "Reloading $DESC configuration" $NAME if start-stop-daemon --stop --signal 2 --oknodo --retry 30 --oknodo \ --quiet --pidfile $PIDFILE --exec $DAEMON @@ -67,12 +70,17 @@ else log_end_msg 1 fi + fi ;; restart|force-reload) + log_daemon_msg "Checking $DESC configuration file" + if $DAEMON -t $DAEMON_OPTS + then $0 stop test -r $PIDFILE && while pidof lighttpd | \ grep -q `cat $PIDFILE 2>/dev/null` 2>/dev/null ; do sleep 1; done $0 start + fi ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2