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.
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