Retarder le lancement d'un service après le boot d'une Debian
- Linux
Voici un article rapide qui me sera surement utile pour plus tard. Lorsque je redémarrais l’un de mes serveurs, mon service nginx ne démarrait pas correctement je ne sais pas exactement pourquoi, il ne trouvait pas un fichier alors que le fichier était bien présent. En essayant de trouver une solution j’ai pensé qu’il suffisait “juste” de retarder le démarrage du service et comme de par hasard cela a été prévu par systemd.
En effet, la configuration du service nginx se trouve dans le fichier /etc/systemd/system/multi-user.target.wants/nginx.service
:
# Stop dance for nginx
# =======================
#
# ExecStop sends SIGQUIT (graceful stop) to the nginx process.
# If, after 5s (--retry QUIT/5) nginx is still running, systemd takes control
# and sends SIGTERM (fast shutdown) to the main process.
# After another 5s (TimeoutStopSec=5), and if nginx is alive, systemd sends
# SIGKILL to all the remaining processes in the process group (KillMode=mixed).
#
# nginx signals reference doc:
# http://nginx.org/en/docs/control.html
#
[Unit]
Description=A high performance web server and a reverse proxy server
Documentation=man:nginx(8)
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/bin/sleep 10
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed
[Install]
WantedBy=multi-user.target
La ligne qui nous intéresse dans le fichier est ExecStartPre=/usr/bin/sleep 10
, cela correspond à une commande executée avant le démarrage réel du service. Dans notre cas, la commande qui sera executée par l’étape ExecStartPre
va permettre d’attendre 10 secondes avant le démarrage effective de nginx. Ainsi à chaque démarrage de nginx, il y aura un délai de 10 secondes avant même lorsque l’on utilise la commande systemctl restart nginx
.
Après un petit reboot du serveur j’ai pu vérifier que mon service nginx démarrait dorénavant correctement.
Je ne sais pas comment est modifié ce fichier lors des mises à jour de nginx, du coup c’est la raison principal qui m’a motivé à faire cet article pour remettre facilement la main dessus. Si jamais vous connaissez une technique plus efficace ou plus “safe”, je suis intéressé de savoir laquelle, contactez moi sur Mastodon