Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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.

wikipedia

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é smile smile
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

katian a écrit :

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

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

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 smile

#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 wink

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 wink

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!

Tawal a écrit :

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.

Tawal a écrit :

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

katian a écrit :

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