web-dev-qa-db-fra.com

Comment démarrer un service SystemD après la connexion de l'utilisateur et l'arrêter avant la déconnexion de l'utilisateur

J'ai une machine Fedora 23.

J'ai un répertoire/une synchronisation de fichier bash qui synchronise mon répertoire local/domestique à un répertoire distant (dans A NAS machine). Je l'exécute manuellement mais je voudrais créer un service SystemD et Rendez-le plus flexible, car d'autres personnes utilisent mon ordinateur avec leurs propres informations d'identification de l'utilisateur, je voudrais savoir quand un utilisateur est connecté et démarre mon service après.

Y a-t-il quelque chose que je peux faire dans le fichier SystemD de mon service ou devrai-je vérifier cela de mon code dans le script?

Il suffit de vous assurer que j'ai accès à des variables d'environnement (comme US $ USER) et de l'exécuter en tant que service.

Ma principale source de documentation est ce lien https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/sect-maning_services_with_systemd-unit_files.html

10
GeorgeKaf

Utilisez SystemD Cela inclut déjà un support pour les sessions utilisateur, vous devez en faire déjà dépendre de celui-ci (involontairement).

Créez le répertoire de service

mkdir -p $HOME/.local/share/systemd/user

Créez Modifier un fichier de service (Vim, Gedit, Geany - Quoi que vous souhaitiez)

vim $HOME/.local/share/systemd/user/my.service

Il devrait ressembler à peu près à ceci, s'il s'agit d'un service permanent.

[Unit]
Description=My very own Service
[Service]
Type=simple
TimeoutStartSec=0
ExecStart=/path/to/start/script arguments
[Install]
WantedBy=default.target

mais il semble que vous préférez que vous souhaitiez le déclencher une fois, alors soyez bon avec elle, alors utilisez plutôt une configuration de référence comme celle-ci :

[Service]
Type=oneshot
RemainAfterExit=true
StandardOutput=journal
ExecStart=/path/to/start/script arguments
ExecStop=/path/to/stop/script arguments
[Install]
WantedBy=default.target

Cela suppose bien sûr que votre script est exécutable, c'est-à-dire

chmod a+x /path/to/start/script
chmod a+x /path/to/stop/script

Sinon, vous auriez besoin de préparer le chemin de l'interprète respectif:

ExecStart=/bin/bash /path/to/start/script arguments

Maintenant rechargez SystemD (et ré-identifiant pour des mesures de test)

systemctl --user enable my.service # enables the service
systemctl --user # should display your new unit in the list
journalctl --user should show the log

Si vous avez besoin de plus d'informations, reportez-vous à la section Arch-wiki par exemple. Ceci Le fil d'askubuntu a diverses idées, notamment les miennes.

Vous pouvez étendre le comportement (si vous êtes root) à d'autres utilisateurs en définissant le service mondial. Pour ce faire, vous devez créer le fichier de service dans USR/Share/Systemd/User / Pas in $ Accueil/.Local/Share/Systemd/Utilisateur.

14
anx