web-dev-qa-db-fra.com

-Script Bash comme service linux ne fonctionne pas, mais exécutée à partir de travaux terminaux parfaitement

J'ai un script personnalisé pour monter Google Drives.
[.____] La partie de ce script est suivant le code:

if [ ! "$(which google-drive-ocamlfuse)" ]
then
    echo "Install google-drive-ocamlfuse first!"
    exit 1
fi

Exécuté de terminal, fonctionne comme le charme.
[.____] Alors, je l'ai configuré en tant que service:

[Unit]
Description=Mount and umount google drives

[Service]
User=<usernamehere>
Type=oneshot
RemainAfterExit=true
ExecStart=/home/<usernamehere>/mybscripts/gdrivemounter.sh -m
ExecStop=/home/<usernamehere>/mybscripts/gdrivemounter.sh -u
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/<usernamehere>/.Xauthority"

[Install]
WantedBy=graphical.target

Malheureusement, je vois le code de sortie: "Installez Google-Drive-Ocamlfuse d'abord!" quand je vérifie le statut de service.

Commande quelle Google-Drive-Ocamlfuse sous l'utilisateur et la racine me donne un chemin valide:

$ which google-drive-ocamlfuse
/home/<usernamehere>/.opam/default/bin/google-drive-ocamlfuse

Où est le problème?

8
rah606

Le problème est que lorsque le script fonctionne comme un service, il ne fonctionne pas comme "vous": il n'a pas votre environnement. Spécifiquement, il n'a pas votre variable PATH.

Soit ajouter /home/<usernamehere>/.opam/default/bin sur le chemin de votre script, ou tout simplement codé le chemin complet de ce programme.

12
glenn jackman

La raison la plus probable est que le répertoire contenant google-drive-ocamlfuse est dans le PATH de votre coquille de connexion, mais pas dans la norme PATH utilisé par systemd.

Il suffit d'ajouter une ligne comme celle-ci au début de votre script:

PATH=$PATH:/path/to/google-drive-ocamlfuse
3
RalfFriedl

Merci à tous pour des solutions. Chacun est important pour moi et utile - encore une fois j'ai appris quelque chose de nouveau. À la fin, j'ai décidé d'installer Google-Drive-Ocamlfuse de Deb, à la place via OPAM. Il est préférable d'installer GDO dans un chemin disponible pour tous les utilisateurs. Pour cette raison, une configuration supplémentaire de $ de path n'est pas nécessaire.

1
rah606