Comment faire fonctionner mon service systemd via un utilisateur spécifique et démarrer au démarrage?

78

Je viens de mettre à jour le serveur Ubuntu 14 à la version 15. J'ai eu du mal à faire fonctionner mon script de démarrage après la mise à niveau et j'ai lu que systemd était le nouveau paramètre par défaut. Je suis loin d'être un expert Linux, alors allez-y doucement: -)

Voici ce qu’était mon script de démarrage:

description "NZBGet upstart script"

setuid robert
setgid robert

start on runlevel [2345]
stop on runlevel [016]

respawn

expect fork

script
    exec nzbget -D
end script

pre-stop script
    exec nzbget -Q
end script

Sur la base de la page wiki de démarrage vers systemd , j'ai utilisé les tableaux fournis pour mapper les choses aussi nouveau fichier de service systemd:

[Unit]
Description=NZBGet Service

[Service]
Type=forking
ExecStart=/usr/local/bin/nzbget -D
ExecStop=/usr/local/bin/nzbget -Q
Restart=on-failure

Ce fichier est situé à /home/robert/.config/systemd/user/nzbget.service . Pour démarrer le service manuellement, je fais:

$ systemctl --user start nzbget

Cela fonctionne très bien. Cependant, lorsque je me déconnecte de ma session SSH, le service s'arrête. En outre, il ne démarre pas au démarrage ou lors de la connexion de l'utilisateur. Je veux qu'il se comporte comme un service novateur: je veux qu'il démarre au démarrage, soit exécuté en permanence et en tant qu'utilisateur spécifique.

Que dois-je faire pour obtenir cette configuration?

    
posée void.pointer 19.09.2015 - 18:17
la source

2 réponses

96

Premier problème

Vous pouvez spécifier les directives User= et Group= dans la section [Service] du fichier unité.

Deuxième problème

Pour que le service s'exécute au démarrage, vous ne devez pas le placer dans votre dossier personnel. Au lieu de cela, mettez-le sous /etc/systemd/system/ . Ceci est le dossier destiné à être utilisé par l'administrateur système (c'est-à-dire vous) pour ajouter de nouveaux services à l'échelle du système.

D'autres dossiers incluent:

  • /usr/lib/systemd/system/ est destiné aux packages qui veulent installer des fichiers unitaires, bien que sous Debian et Ubuntu, le dossier soit en réalité /lib/systemd/system/ , car les différents dossiers bin et lib n'ont pas encore été fusionnés.
  • /usr/ sert à installer des unités à l'aide de packages compilés localement.

Test de l’unité

Une fois que le fichier d'unité est dans un emplacement approprié, vous pouvez essayer de démarrer l'unité immédiatement en tapant /usr/local/systemd/system/ comme d'habitude. Il devrait fonctionner sans avoir à taper le chemin complet de l'unité. L’extension n’a pas non plus besoin d’être spécifiée si systemctl start <UNIT_FILENAME> .

Activation de l’unité

Avant de pouvoir activer votre unité, vous devez ajouter une section .service , sous laquelle vous devez ajouter la directive [Install] . Cette directive spécifie la phase du processus de démarrage au cours de laquelle le service doit être démarré (s’il était activé). WantedBy=multi-user.target convient à la plupart des services.

Une fois ces informations ajoutées, vous pouvez utiliser multi-user.target , ce qui active l’unité, ce qui permet à systemd de le démarrer automatiquement lors du démarrage à l’étape spécifiée.

    
réponse donnée Yamaho 19.09.2015 - 18:51
la source
28

Vous pourriez être intéressé par l'utilisation de la fonctionnalité "utilisateur persistant" de systemd. Il est activé via loginctl enable-linger USERNAME .

Un gestionnaire de services distinct pour l'utilisateur correspondant est démarré au démarrage. Ainsi, les unités définies par l'utilisateur dans ~/.config/systemd/user seront récupérées et traitées aux heures de démarrage et d'arrêt en fonction de la configuration de votre service.

Vous pouvez également utiliser systemctl --user pour gérer et configurer le ou les services, qui fonctionneront sur le gestionnaire de services de votre utilisateur, pas sur celui du système.

    
réponse donnée byteborg 11.12.2016 - 21:28
la source

Lire d'autres questions sur les étiquettes