J'ai créé ce script:
[Unit]
Description=test
[Service]
WorkingDirectory=/home/someuser
ExecStart=/somescript.sh
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=autodeploy
Environment=NODE_ENV=production PORT=1494
[Install]
WantedBy=multi-user.target
Mais quand je le lance, il dit:
Process: 8986 ExecStart=/somescript.sh (code=exited, status=203/EXEC)
J'ai compris que ce message signifiait que le script ne serait pas trouvé ... Pourquoi Working Directory ne fonctionne-t-il pas pour moi?
Merci.
Le paramètre systemd paramètre __ WorkingDirectory=
définit le répertoire dans lequel le service sera lancé, comme lorsque vous utilisiez cd
pour modifier un répertoire lorsque vous travaillez dans le shell.
Cela ne signifie pas que tous les autres chemins (y compris celui de ExecStart=
) seront désormais relatifs à celui-ci, vous devez donc toujours spécifier le chemin de votre script dans cette directive:
ExecStart=/home/someuser/somescript.sh
Peut-être pensiez-vous à RootDirectory=
directive ? Ce répertoire utilise la commande chroot
pour permuter la racine du système de fichiers vu par le processus par le répertoire que vous spécifiez. Par conséquent, si vous utilisez /
pour l'emplacement du script, cela ressemble peut-être à ce que vous vouliez ... Cependant, utilisez RootDirectory=
nécessite que vous ayez une image système, avec des fichiers binaires et des bibliothèques. Par exemple, vous devez disposer d'un /bin/sh
pour exécuter votre script Shell et d'un /lib
avec une libc, etc. En règle générale, vous ne pouvez pas utiliser RootDirectory=
dans n'importe quel répertoire de votre choix ...
Donc, mon conseil pour résoudre le problème que vous voyez est de simplement mettre à jour le ExecStart=
pour répertorier le chemin complet de votre script.