web-dev-qa-db-fra.com

systemd est en attente lorsque je démarre ou redémarre un service

Je suis nouveau sur systemd après la mise à niveau vers 16.04 et je rencontre un problème avec le démarrage et le redémarrage des services. Quand je cours (par exemple) ...

systemctl start djalbat.com

... cela semble fonctionner, mais je ne récupère pas l'invite, elle semble juste rester en place. Si je ctrl-c récupère l'invite et vérifie si le service a démarré, il semble l'avoir fait. Je me demande quelle est la configuration qui provoquerait cela? C'est ici:

[Unit]
Description=djalbat.com


[Service]
Type=forking
WorkingDirectory=/var/www/djalbat.com/
ExecStart=/usr/bin/node ./bin/main.js start 2>&1 >> /var/log/djalbat.com.log


[Install]
WantedBy=multi-user.target

En outre, si quelqu'un pouvait signaler la nécessité de la dernière directive WantedBy, nous l'apprécierions.

4
James Smith

Il s’est donc avéré que la commande exécutée avec la configuration ExecStart n’avait pas fork alors que le service systemd était configuré pour un exécutable de forking. Ceci conduit systemctl à attendre que le fichier de l'exécutable aboutisse à une ligne de commande non renvoyée.

La configuration correcte pour un exécutable non fork consiste à utiliser Type=simple.

[Unit]
Description=djalbat.com

[Service]
Type=simple
WorkingDirectory=/var/www/djalbat.com/
ExecStart=/usr/bin/node ./bin/main.js start 2>&1 >> /var/log/djalbat.com.log

[Install]
WantedBy=multi-user.target

WantedBy est nécessaire pour connecter cette unité à une cible. Cette unité ou ce service est démarré automatiquement lorsque la cible appropriée est atteinte et le service est activé pour démarrer automatiquement avec

systemctl enable djalbat

N'oubliez pas d'actualiser systemd après avoir modifié vos fichiers de service avec

systemctl daemon-reload
5
Thomas