212 votes

Comment faire pour que mon service systemd soit exécuté par un utilisateur spécifique et démarre au démarrage ?

Je viens de passer du serveur Ubuntu 14 à la version 15. J'ai eu du mal à faire fonctionner mon upstart script après la mise à niveau, et j'ai lu que systemd était le nouveau système par défaut. Je suis loin d'être un expert en linux, alors soyez indulgent avec moi :-)

Voici ce que mon script de démarrage était avant :

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 upstart vers la page wiki de systemd J'ai utilisé les tables fournies pour mapper les choses aussi précisément que possible dans mon 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é à l'adresse suivante /home/robert/.config/systemd/user/nzbget.service . Pour démarrer le service manuellement, j'ai fait :

$ systemctl --user start nzbget

Cela fonctionne très bien. Cependant, lorsque je me déconnecte de ma session SSH, le service s'arrête. De même, il ne démarre pas au démarrage ou à la connexion de l'utilisateur. Je veux qu'il se comporte de la même manière qu'en tant que service de démarrage : Je veux qu'il démarre au démarrage, qu'il fonctionne en permanence et qu'il soit utilisé par un utilisateur spécifique.

Que dois-je faire pour obtenir cette configuration ?

271voto

Yamaho Points 4053

Premier problème

Vous pouvez spécifier les directives User= y Group= dans le [Service] du fichier de l'unité.

Deuxième problème

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

Les autres dossiers comprennent :

  • /usr/lib/systemd/system/ est destiné aux paquets qui veulent installer des fichiers unitaires, bien que sous Debian et Ubuntu le dossier soit en fait /lib/systemd/system/ parce que les différents bin y lib n'ont pas été fusionnés en un dossier unifié. /usr/ préfixe encore.
  • /usr/local/lib/systemd/system/ sert à installer des unités par des paquets compilés localement.

Test de l'unité

Une fois que le fichier de l'unité se trouve dans un emplacement approprié, vous pouvez essayer de démarrer l'unité immédiatement en tapant systemctl start <UNIT_FILENAME> comme d'habitude. Cela devrait fonctionner sans avoir à taper le chemin complet de l'unité. Il n'est pas non plus nécessaire de spécifier l'extension s'il s'agit de .service .

Activation de l'unité

Avant de pouvoir activer votre unité, vous devez ajouter une [Install] sous laquelle vous devez ajouter la directive WantedBy=multi-user.target . Cette directive spécifie l'étape du processus de démarrage pendant laquelle le service doit être lancé (s'il était activé). multi-user.target est approprié pour la plupart des services.

Une fois que cette information est ajoutée, vous pouvez utiliser systemctl enable <UNIT_FILENAME> qui active l'unité et permet à systemd de la démarrer automatiquement au démarrage à l'étape spécifiée.

84voto

byteborg Points 1290

Vous pourriez être intéressé par l'utilisation de l'outil systemd persistance de l'utilisateur fonctionnalité. Elle est activée par loginctl enable-linger USERNAME .

Cela entraîne le démarrage d'un gestionnaire de services distinct pour l'utilisateur respectif au démarrage, de sorte que vos unités définies par l'utilisateur dans le fichier ~/.config/systemd/user seront récupérés et traités aux heures de démarrage et d'arrêt selon la configuration de votre service.

Vous pouvez également utiliser systemctl --user pour gérer et configurer le(s) service(s), qui fonctionnera sur le gestionnaire de services de votre utilisateur, et non sur celui du système.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X