#1 Le 30/04/2020, à 04:32
- katian
[ASTUCE] systemd & services utilisateur
Bonjour,
Il est possible de créer un service au niveau utilisateur (celui-ci ne nécessite pas de droits sudo)
Pour cela il suffit de créer un service user (edit du 03.04.2021)
$ systemctl --user edit ipfs.service --full --force
pour l'exemple, dans ce dossier j'ai créé un service ipfs :
$ cat ~/.config/systemd/user/ipfs.service
[Unit]
Description=IPFS daemon
[Service]
Environment="IPFS_PATH=/mnt/data0/.ipfs_data"
ExecStart=/usr/local/bin/ipfs daemon --init --migrate
Restart=on-failure
[Install]
WantedBy=multi-user.target
ensuite il est possible de :
démarrer le service :
systemctl --user start ipfs.service
arrêter le service :
systemctl --user stop ipfs.service
statut du service :
systemctl --user status ipfs.service
activer le service au boot :
systemctl --user enable ipfs.service
désactiver le service au boot :
systemctl --user disable ipfs.service
cet aspect n'est pas encore documenté dans le wiki et je trouve intéressant de l'aborder, vos remarque sont les bienvenues
journal :
$ journalctl --user -u ipfs.service -f
Dernière modification par katian (Le 03/04/2021, à 03:24)
Hors ligne
#2 Le 30/04/2020, à 05:20
- ar barzh paour
Re : [ASTUCE] systemd & services utilisateur
pour moi (et pour d'autres)
saurais-tu expliquer ce qu"est un service et à quoi ça sert ?
ou un lien vers un dossier explicatif
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#3 Le 30/04/2020, à 05:35
- katian
Re : [ASTUCE] systemd & services utilisateur
Je fait le raccourci service / démon (merci de me corriger)
dans l'exemple que je cite je considère ça comme un démon : le démon étant un type de programme informatique, un processus ou un ensemble de processus qui s'exécute en arrière-plan plutôt que sous le contrôle direct d'un utilisateur.
https://doc.ubuntu-fr.org/services
Dernière modification par katian (Le 30/04/2020, à 05:37)
Hors ligne
#4 Le 30/04/2020, à 05:46
- ar barzh paour
Re : [ASTUCE] systemd & services utilisateur
ok merci pour la réactivité
je vais essayer de regarder de plus près cette notion
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#5 Le 30/04/2020, à 05:51
- krodelabestiole
Re : [ASTUCE] systemd & services utilisateur
cet aspect n'est pas encore documenté dans le wiki et je trouve intéressant de l'aborder, vos remarque sont les bienvenues
hésite pas à compléter la doc, c'est ouvert à tout le monde : https://doc.ubuntu-fr.org/wiki/participer_wiki
nouveau forum ubuntu-fr on en parle là : refonte du site / nouveau design
profil - sujets récurrents - sources du site
Hors ligne
#6 Le 30/04/2020, à 05:54
- katian
Re : [ASTUCE] systemd & services utilisateur
je vais m'en charger krodelabestiole j'ai créé ce fil pour les éventuelles remarques avant mise à jour du wiki
Hors ligne
#7 Le 30/04/2020, à 07:21
- bruno
Re : [ASTUCE] systemd & services utilisateur
Bonjour,
J'ai déplacé le sujet dans la section appropriée.
Quelques remarques.
Les unités systemd utilisateur fournies par les paquets Uuntu sont dans /usr/lib/systemd/user/. On peut en ajouter (ou surcharger) dans /etc/systemd/user.
Les unités spécifique à un utilisateur sont dans le dossier personnel de cet utilisateur ~/.config/systemd/user/
On peut y trouver des unités de service pour lancer des programmes ou des processus, des unités de montage, des timers, etc.
Un « service » systemd n'est pas forcément un démon, ce peut être un programme qui n'est exécuté qu'une seule fois. Les services systemd remplacent les scripts qui étaient lancés au démarrage de l'ordinateur par l'ancien système d'initialisation upstart/SYSV et ceux lancés à l'ouverture de session utilisateur.
Dernière modification par bruno (Le 30/04/2020, à 07:26)
#8 Le 30/04/2020, à 07:54
- krodelabestiole
Re : [ASTUCE] systemd & services utilisateur
ils peuvent aussi remplacer les tâche cron : https://wiki.archlinux.org/index.php/Systemd/Timers
nouveau forum ubuntu-fr on en parle là : refonte du site / nouveau design
profil - sujets récurrents - sources du site
Hors ligne
#9 Le 30/04/2020, à 08:32
- bruno
Re : [ASTUCE] systemd & services utilisateur
Oui les unités systemd peuvent remplacer cron avec les timers, remplacer le fsatb avec mount et autofs avec automount, remplacer la configuration réseau avec link et network, gérer les périphériques (udev), le swap, etc. Elles ne font pas le café mais ça viendra
#10 Le 25/05/2020, à 14:05
- trois-nuits-par-semaine
Re : [ASTUCE] systemd & services utilisateur
Merci pour toutes ces infos (De l'astuce aux commentaires qui ont suivi ;-) )
Hors ligne
#11 Le 03/02/2022, à 01:52
- Z3F4F
Re : [ASTUCE] systemd & services utilisateur
Bonjour (ou bonsoir ou bonne nuit...),
Je pense être exactement de le cas que katian décrit dans le post initial mais j'ai un petit souci.
Je cherche à exécuter au boot et au shutdown un script que j'ai mis placé dans /home/userxxx/Programs/Scripts/start_and_stop.sh
Pour cela je crée un service via systemd et j'ai choisi de le laisser au niveau utilisateur (en l’occurrence userxxx).
J'ai donc dans '~/.config/systemd/user/start_and_stop.service' le descriptif suivant :
[Unit]
Description=Runs a custom script at startup and shutdown
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/home/userxxx/Programs/Scripts/start_and_stop.sh
ExecStop=/home/userxxx/Programs/Scripts/start_and_stop.sh
[Install]
WantedBy=multi-user.target
Cela me semble correspondre à ce que je cherche à faire.
Après avoir créé ce service, je l'ai activé en lançant :
systemctl --user enable start_and_stop.service
ce qui a bien changé le statut du service en "Enabled".
J'ai ensuite lancé le service :
systemctl --user start start_and_stop.service
et j'ai contrôlé le statut, jusque là tout fonctionne.
Je fais un shutdown pour tester et le script s’exécute comme prévu! OK!
Par contre au redémarrage, pas d’exécution du script alors je contrôle le statut :
● start_and_stop.service - Run Scripts at Start and Stop
Loaded: loaded (/home/userxxx/.config/systemd/user/start_and_stop.service; enabled; vendor preset: enabled)
Active: inactive (dead)
Le service est toujours "enabled" mais il ne se lance pas automatiquement au démarrage...
Quelqu'un voit ce que j'ai loupé?
Un grand merci d'avance!
Hors ligne
#12 Le 03/02/2022, à 03:40
- katian
Re : [ASTUCE] systemd & services utilisateur
salut Z3,
selon mes notes, pour activer les services user au reboot
$ loginctl enable-linger
normalement ça devrait le faire
Hors ligne
#13 Le 03/02/2022, à 12:55
- Z3F4F
Re : [ASTUCE] systemd & services utilisateur
Salut Katian,
Je te remercie pour ta réponse rapide! C'est une bonne piste effectivement et sur base de ta réponse j'ai trouvé une réponse similaire ici (en 2e réponse). J'ai donc testé mais le résultat est le même, malheureusement.
Une petite remarque cependant : lorsque je lance manuellement le service, puisqu'il ne fait pas grand chose à part exécuter en one-shot un script à son démarrage et à sa fermeture, son status est "active (exited)".
Est ce que ça pourrait avoir une incidence?
Je continue de chercher...
Encore merci et bonne journée!
Hors ligne
#14 Le 03/02/2022, à 14:48
- Tawal
Re : [ASTUCE] systemd & services utilisateur
Hello,
Si ton service personnel te renvoie "active (exited)", c'est normal au vu de la forme de ce service : one-shot (et l'option RemainAfterExit=ttrue)
Ce retour indique que le script/commande lancé par le service l'a bien été et s'est terminé.
D'ailleurs, tu dois aussi avoir le code retour de ton script.
Donc pour revenir à ton souci : inactive (dead) du #1
Pour moi, cela indique que la commande/script lancée par le service ne s'est pas bien déroulée et a renvoyé un code retour différent de 0.
Ton script est bien lancé au démarrage, mais il se termine en erreur.
Retravaille ton script pour qu'il inscrive dans un fichier les retours des commandes primordiales, tu trouveras ainsi peut-être la raison et la solution
Dernière modification par Tawal (Le 03/02/2022, à 14:49)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#15 Le 03/02/2022, à 15:05
- Z3F4F
Re : [ASTUCE] systemd & services utilisateur
Merci Tawal!
Si ton service personnel te renvoie "active (exited)", c'est normal au vu de la forme de ce service : one-shot (et l'option RemainAfterExit=ttrue)
Ce retour indique que le script/commande lancé par le service l'a bien été et s'est terminé.
D'ailleurs, tu dois aussi avoir le code retour de ton script.
C'est bien ce que je pensais aussi, merci pour ta confirmation.
Ton script est bien lancé au démarrage, mais il se termine en erreur.
Alors que quand je relance manuellement tout s'execute bien... Donc si je pousse ton raisonnement, il doit y avoir une dépendance qui n'est pas valide au démarrage au moment où le service tente de se lancer. C'est ça?
Merci pour l'idée, je vais creuser ça!
Bonne journée!
Hors ligne
#16 Le 03/02/2022, à 15:34
- Tawal
Re : [ASTUCE] systemd & services utilisateur
Sans connaître le contenu du script, c'est difficile à dire.
Mais je pencherais pour des variables d'environnement manquantes.
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#17 Le 04/02/2022, à 17:46
- Z3F4F
Re : [ASTUCE] systemd & services utilisateur
Bonsoir!
Encore un grand merci à Katian et Tawal pour leur aide sur le sujet!
Ca m'a pris un peu de temps avant de trouver l'explication et je vous en fais part ici, ça servira certainement à d'autres...
J'ai exploré les pistes indiquées par Katian d'une part puis par Tawal. J'ai tracé au maximum ce qui se passait et j'ai exploré les journaux (voir la dernière commande fournie par Katian dans le post initial). Bizarrement il n'y avait aucune erreur se rapportant à mon service. En fait il n'était pas du tout fait mention de ce service dans les journaux après redémarrage ce qui semblait confirmer qu'il n'était pas dans le scope des services lancés automatiquement... et pour cause!
J'ai fini par trouver un autre exemple de problème du même genre et la 2e réponse sur ce fil de discussion m'a apporté le fin mot de l'histoire : l'option --user est incompatible avec le target multi-user. En passant sur default.target tout fonctionne correctement.
Remarque : après avoir modifié le target dans le descriptif du service, il ne faut pas oublier de faire un disable puis un enable (pour supprimer et recréer les bons liens).
Merci encore aux contributeurs et à bientôt!
Hors ligne
#18 Le 08/06/2022, à 15:03
- Gyp
Re : [ASTUCE] systemd & services utilisateur
Bonjour,
Je me permets de relancer ce post, car il correspond à mes besoins. Je suis sous Ubuntu 22.04 et je travaille sur Lilypond avec Frescobaldi (3.2). Pour obtenir un rendu Midi avec Frescobaldi, j’utilise FluidSynth, que j’essaie de faire démarrer en utilisant systemd.
Pour cela, en suivant cette page, j’ai créé le fichier fluidsynth.service dans le dossier suivant /etc/systemd/user, en adaptant le chemin de mes soundfonts. Je l’ai de plus enregistré aussi dans /etc/systemd/system, selon ce que j'ai cru comprendre ailleurs :
[Unit]
Description=FluidSynth launched in server mode
After=sound.target
[Service]
ExecStart=/usr/bin/fluidsynth -a pulseaudio -m alsa_seq -i -l -s -p FluidSynth /usr/share/sounds/default-GM.sf3
[Install]
WantedBy=default.target
Le son Midi fonctionne sous Frescobaldi après avoir lancé les commandes :
systemctl --user daemon-reload
systemctl --user start fluidsynth.service
Par contre, je ne suis pas parvenu à faire que le service se lance au démarrage, malgré mes différentes tentatives, avec la commande :
systemctl --user enable fluidsynth.service
Peut-être pourriez-vous m'aider, merci d'avance.
Hors ligne
#19 Le 08/06/2022, à 15:17
- katian
Re : [ASTUCE] systemd & services utilisateur
salut regarde plus haut il est question de
$ loginctl enable-linger
post #12 et suivants
Hors ligne
#20 Le 08/06/2022, à 15:27
- Gyp
Re : [ASTUCE] systemd & services utilisateur
Merci, je l'ai fait, mais le service ne fonctionne toujours pas automatiquement.
Hors ligne
#21 Le 08/06/2022, à 17:21
- katian
Re : [ASTUCE] systemd & services utilisateur
désolé, j'ai répondu trop hâtivement,
je te donne mon service sur lequel j'ai pas mal galéré :
[Unit]
Description=valheim server service
Wants=network.target
After=syslog.target network-online.target
[Service]
Type=simple
Restart=on-failure
RestartSec=120
SyslogIdentifier=valheim-server
WorkingDirectory=/home/joyce/valheim_server
ExecStartPre=/home/joyce/script/server-update
ExecStart=/home/joyce/script/server-run
KillSignal=SIGINT
TimeoutStopSec=5min
[Install]
WantedBy=default.target
c'est un service 'user' comme le tiens mais expliquer ton soucis ???
je suis pas expert mais si tu as des question sur ce service que j'utilise (ou ses scripts) n'hésite pas
Hors ligne
#22 Le 08/06/2022, à 17:29
- Gyp
Re : [ASTUCE] systemd & services utilisateur
Merci de ton partage, mais je ne suis pas en mesure de rectifier mon service, si nécessaire, avec l'aide du tien.
Il apparaît que la procédure décrite à la page évoquée fonctionne chez plusieurs, sans trop de problèmes.
Je ne sais pas où est le problème chez moi.
Cordialement
Hors ligne
#23 Le 08/06/2022, à 17:42
- katian
Re : [ASTUCE] systemd & services utilisateur
Create the service file in your home directory, in this exact location: ~/.config/systemd/user/fluidsynth.service
oulala pas propre
un
systemctl --user edit fluidsynth.service --full
ou
systemctl --user edit fluidsynth.service --full --force
mais je pinaille
vérifier que ton user est déclaré pour le reboot :
ll /var/lib/systemd/linger/
après peut être une notion de
User=xxxx
à ajouter dans le service ?
au boot c'est pas le même contexte que quand tu est logué dans ta session (je suppose)
(mais je suis beaucoup trop novice sur les rouages de systemd)
il faut attendre plus expert
Hors ligne
#24 Le 08/06/2022, à 17:53
- Gyp
Re : [ASTUCE] systemd & services utilisateur
vérifier que ton user est déclaré pour le reboot :
ll /var/lib/systemd/linger/
Il l'est.
Hors ligne
#25 Le 08/06/2022, à 18:24
- katian
Re : [ASTUCE] systemd & services utilisateur
après reboot tu as du blabla sur
$ systemctl --user status fluidsynth.service
?
Hors ligne