n'a pas pu démarrer le service

15

J'ai créé un service systemd:

[Unit]
Description=My service

[Service]
Type=forking
ExecStart=/bin/sh $HOME/theFolder/run.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target
Alias=mine.service

Je l'ai mis dans le dossier / etc / systemd / system et je l'ai nommé mine.service.

Si je cours, sudo service mine startcela me donne:

Impossible de démarrer mine.service.Unit mine.service introuvable

--- MISE À JOUR -----

Je cours d'abord sudo systemctl daemon-reloadet maintenant il ne me donne aucun message mais le service ne démarre toujours pas.

George
la source
10
Avez-vous exécuté systemctl daemon-reloadaprès avoir créé votre fichier d'unité?
Wieland
@Wieland: Hmm..Maintenant, il ne m'affiche aucun message, mais il ne démarre toujours pas.
George
@don_crissti: Le statut indique qu'il est actif, mais le script (dans ExecStart) n'est pas exécuté.
George
comment il connaîtrait le bon $ HOME? Que pensez-vous que ce soit pour un service système?
Serge
@Serge: Hmm..Alors, comment puis-je utiliser $ HOME?
George

Réponses:

14

$HOMEpointe vers le répertoire personnel de l'utilisateur qui exécute le script. Les services Systemd sont démarrés avec root, il essaiera probablement de le faire /root/theFolder/run.sh. Utilisez des chemins absolus dans les fichiers de service.

Vous avez également l' forkingoption définie. Ceci est nécessaire pour les programmes qui se fondent eux-mêmes, votre script fait-il cela? La plupart ne le font pas et si le vôtre ne le fait pas, vous devez supprimer cette option ou systemd attendra que votre script se termine pour le revendiquer comme démarré.

Les fichiers de service système qui pointent vers des scripts dans votre répertoire personnel sont également déconseillés et peuvent poser un problème de sécurité. Puisqu'ils sont exécutés en tant que root, toute personne qui peut les modifier peut potentiellement obtenir un accès root à votre ordinateur. Il est préférable de copier le script /usr/local/binet de vous assurer qu'il est détenu et accessible en écriture uniquement par root pour arrêter cela. C'est également une bonne idée d'exécuter le script en tant qu'utilisateur non privilégié en utilisant les options User=et Group=dans le fichier de service.

Si vous souhaitez l'exécuter en tant qu'utilisateur, il est préférable de placer le fichier de service ~/.config/systemd/user/et de le démarrer / l'activer avec systemctl --user enable yourservice && systemctl --user start yourservice(notez, exécutez en tant qu'utilisateur non root). Voir ceci pour plus d'informations sur les fichiers de service utilisateur.

Michael Daffin
la source
: Je mets le script dans / usr / local / bin et le service dans /.config/systemd/user. Si j'essaye d'activer le service, il me montre des "arguments en excès". .. unit .. ', quelque chose comme ça.
George
Pouvez-vous fournir les commandes complètes que vous avez essayées et des journaux plus détaillés. Son difficile à déboguer avec des fragments.
Michael Daffin
: Y a-t-il une solution pour utiliser le chemin $ HOME? Parce que, si je mets le script dans / usr / local / bin, il utilise des chemins relatifs à $ HOME . J'ai vu cela . Et j'ai essayé de mettre HOME=$HOMEdans le premier fichier d'environnement. Mais le service n'a pas pu démarrer, aucune erreur.
George
1
sur ubuntu j'ai dû utiliser systemctl pour ce pas systemd, en utilisant systemd j'ai eu une erreur "Excess Arguments"
Alexander Mills
1
@AlexanderMills Vous avez raison, la bonne commande dans systemctl et systemd n'était qu'une faute de frappe dans la réponse.
Michael Daffin