Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
creer_un_service_avec_systemd [Le 15/03/2020, 21:22] 88.124.106.35 Correction du UMask |
creer_un_service_avec_systemd [Le 17/12/2024, 12:10] (Version actuelle) geole [Exemple de service cyclique.] servic utilisateur |
||
---|---|---|---|
Ligne 21: | Ligne 21: | ||
<code>sudo cp -r /etc/systemd/system /etc/systemd/system.save$(date +%Y%m%d)</code></note> | <code>sudo cp -r /etc/systemd/system /etc/systemd/system.save$(date +%Y%m%d)</code></note> | ||
- | Une fois le fichier de configuration de service crée, il faut l'activer pour qu'il soit pris en compte par le système et lancé à chaque démarrage. | + | Une fois le fichier de configuration de service créé, il faut l'activer pour qu'il soit pris en compte par le système et lancé à chaque démarrage. |
<code>systemctl enable <nom du service>.service</code> | <code>systemctl enable <nom du service>.service</code> | ||
Ligne 30: | Ligne 30: | ||
Pour plus d'infos sur les diverses commandes de gestion, voir la page [[:systemd#les_services|systemd]] | Pour plus d'infos sur les diverses commandes de gestion, voir la page [[:systemd#les_services|systemd]] | ||
+ | <note help> | ||
+ | Il est possible d'utiliser un service au niveau utilisateur, dans ce cas, les fichiers de configuration se trouvent dans **~/.config/systemd/user/** | ||
+ | |||
+ | |||
+ | Pour un service utilisateur il faut ajouter aux commandes le paramètre --user : | ||
+ | |||
+ | <code> | ||
+ | systemctl --user enable <nom du service>.service | ||
+ | systemctl --user start <nom du service>.service | ||
+ | systemctl --user status <nom du service>.service | ||
+ | </code> | ||
+ | |||
+ | </note> | ||
+ | |||
+ | Pour créer un service utilisateur : | ||
+ | |||
+ | <code> | ||
+ | systemctl --user edit <nom du service>.service --full --force | ||
+ | </code> | ||
+ | |||
+ | Pour éditer un service utilisateur : | ||
+ | |||
+ | <code> | ||
+ | systemctl --user edit <nom du service>.service --full | ||
+ | </code> | ||
+ | |||
+ | Pour ajouter une surcharge (drop-in) sur un service utilisateur : | ||
+ | |||
+ | <code> | ||
+ | systemctl --user edit <nom du service>.service | ||
+ | </code> | ||
+ | |||
+ | <note important>Attention : pour un service user, il faut remplacer ''WantedBy=multi-user.target'' par ''WantedBy=default.target''.</note> | ||
===== Type de services systemd ===== | ===== Type de services systemd ===== | ||
Ligne 37: | Ligne 70: | ||
* Un service de type **oneshot** est similaire à un service de type **simple**. Cependant, systemd attend que le processus se termine avant de continuer ses traitements. **Ce type de service est typiquement utilisé comme équivalent aux commandes lancées au démarrage via les scripts d'init system V**. Cela permet à systemd de remplacer ce mécanisme. De ce fait, avec systemd des nouveaux services apparaissent, alors qu'ils auraient été simplement des scripts d'init avec SysVinit. | * Un service de type **oneshot** est similaire à un service de type **simple**. Cependant, systemd attend que le processus se termine avant de continuer ses traitements. **Ce type de service est typiquement utilisé comme équivalent aux commandes lancées au démarrage via les scripts d'init system V**. Cela permet à systemd de remplacer ce mécanisme. De ce fait, avec systemd des nouveaux services apparaissent, alors qu'ils auraient été simplement des scripts d'init avec SysVinit. | ||
* Un service de type **dbus** est similaire à un service de type **simple**. Cependant, le processus du service doit obtenir un nom via D-Bus. systemd pourra alors traiter les autres unités. | * Un service de type **dbus** est similaire à un service de type **simple**. Cependant, le processus du service doit obtenir un nom via D-Bus. systemd pourra alors traiter les autres unités. | ||
- | * Un service de type **notify** est similaire à un service de type **simple**. Cependant, c'est le processus du service qui avertira systemd (via la fonction sd_notfy(3)) qu'il peut traiter les autres unités. | + | * Un service de type **notify** est similaire à un service de type **simple**. Cependant, c'est le processus du service qui avertira systemd (via la fonction sd_notify(3)) qu'il peut traiter les autres unités. |
===== Exemples de services et leur fichier de configuration===== | ===== Exemples de services et leur fichier de configuration===== | ||
Ligne 50: | Ligne 83: | ||
RemainAfterExit=yes | RemainAfterExit=yes | ||
ExecStart=/usr/libexec/iptables.init start | ExecStart=/usr/libexec/iptables.init start | ||
- | ExecStop=/usr/libexec/iptables.init stop | + | ExecStop=/usr/libexec/iptables.init stop |
</file> | </file> | ||
Ligne 74: | Ligne 107: | ||
User=deluge | User=deluge | ||
Group=deluge | Group=deluge | ||
- | UMask=700 | + | UMask=007 |
ExecStart=/usr/bin/deluged -d | ExecStart=/usr/bin/deluged -d | ||
Ligne 85: | Ligne 118: | ||
[Install] | [Install] | ||
WantedBy=multi-user.target | WantedBy=multi-user.target | ||
- | </file> | + | </file> |
* ''Description'' permet de donner une description du service qui apparaîtra lors de l'utilisation de la commande ''systemctl status <nom_du_service>'' | * ''Description'' permet de donner une description du service qui apparaîtra lors de l'utilisation de la commande ''systemctl status <nom_du_service>'' | ||
Ligne 123: | Ligne 156: | ||
systemctl enable syncthing@Milou.service | systemctl enable syncthing@Milou.service | ||
</code> | </code> | ||
+ | **Qu'est ce qu'un timer-- | ||
+ | |||
+ | Les timers sont des fichiers de programmation qui vont se charger de lancer des services à intervalles réguliers. | ||
+ | |||
+ | Quand vous créez un timer, il doit avoir l'extension .timer. Un service .service du même nom doit exister. (le service est souvent un service minimaliste, de type oneshot, permettant de lancer une commande) | ||
+ | |||
+ | Les timers «pourraient presque» remplacer le planificateur de tâches cron. | ||
+ | |||
==== Exemple de service cyclique. ==== | ==== Exemple de service cyclique. ==== | ||
- | Création du fichier de timer | + | === Service systeme === |
+ | |||
+ | Création du fichier de timer | ||
<file sh /etc/systemd/system/MAJ0.timer> | <file sh /etc/systemd/system/MAJ0.timer> | ||
[Unit] | [Unit] | ||
Description=Lance une mise à jour de l'ordinateur quinze minutes après le démarrage de la machine et itère toutes les trente minutes. | Description=Lance une mise à jour de l'ordinateur quinze minutes après le démarrage de la machine et itère toutes les trente minutes. | ||
[Timer] | [Timer] | ||
- | OnBootSec=15minutes | + | OnBootSec=15minutes |
# le service démarrera 15 minutes après le démarrage de la machine | # le service démarrera 15 minutes après le démarrage de la machine | ||
- | OnUnitActiveSec=30minutes | + | OnUnitActiveSec=30minutes |
Persistent=true | Persistent=true | ||
# le service démarrera toutes les trente minutes après la dernière activation du timer | # le service démarrera toutes les trente minutes après la dernière activation du timer | ||
- | ### voir toutes les possibilités de choix dans ce document http://man7.org/linux/man-pages/man7/systemd.time.7.html | + | ### voir toutes les possibilités de choix dans ce document https://man7.org/linux/man-pages/man7/systemd.time.7.html |
[Install] | [Install] | ||
WantedBy=timers.target | WantedBy=timers.target | ||
Ligne 149: | Ligne 192: | ||
</file> | </file> | ||
Avec les commandes de gestion associées | Avec les commandes de gestion associées | ||
- | <code>sudo systemctl enable MAJ0.timer | + | <code bash>sudo systemctl enable MAJ0.timer |
sudo systemctl start MAJ0.timer | sudo systemctl start MAJ0.timer | ||
sudo systemctl status MAJ0.timer | sudo systemctl status MAJ0.timer | ||
</code> | </code> | ||
+ | === Service utilisateur === | ||
+ | Création et activation du service | ||
+ | <code bash>cat <<"EOF" >$HOME/.config/systemd/user/Alerte.service | ||
+ | [Unit] | ||
+ | Description=Rappeler que le moment est venu. | ||
+ | [Service] | ||
+ | Type=simple | ||
+ | ExecStart=zenity --warning --text " C'est l'heure. Monseigneur." | ||
+ | EOF | ||
+ | sleep 1 | ||
+ | systemctl --user enable Alerte.service; | ||
+ | systemctl --user start Alerte.service;</code> | ||
+ | Création et activation des déclenchements | ||
+ | <code bash>cat <<"EOF" >$HOME/.config/systemd/user/Alerte.timer | ||
+ | [Unit] | ||
+ | Description=indique les moments retenus. | ||
+ | [Timer] | ||
+ | OnCalendar=Mon-Sat *-*-* 10:20:30 | ||
+ | OnCalendar=Sun *-*-* 12:14:16 | ||
+ | [Install] | ||
+ | WantedBy=timers.target | ||
+ | EOF | ||
+ | sleep 1 | ||
+ | systemctl --user enable Alerte.timer; | ||
+ | systemctl --user start Alerte.timer;</code> | ||
+ | |||
+ | |||
====Exemple de service avancé avec la base graphe neo4j==== | ====Exemple de service avancé avec la base graphe neo4j==== | ||
Ligne 172: | Ligne 242: | ||
# Type de l'Unité systemd. | # Type de l'Unité systemd. | ||
- | #Les différents types d'unités sont : | + | #Les différents types d'unités sont : |
# service : pour un service/démon ; | # service : pour un service/démon ; | ||
# socket : pour une socket réseau (de tous types : UNIX, Internet, fichier etc.) ; | # socket : pour une socket réseau (de tous types : UNIX, Internet, fichier etc.) ; | ||
Ligne 190: | Ligne 260: | ||
#https://www.freedesktop.org/software/systemd/man/systemd.service.html | #https://www.freedesktop.org/software/systemd/man/systemd.service.html | ||
[Service] | [Service] | ||
- | #Lance le service dans un processus système indépendant. | + | #Lance le service dans un processus système indépendant. |
# simple, forking, oneshot, dbus, notify ou idle sont les valeurs possibles de Type=. | # simple, forking, oneshot, dbus, notify ou idle sont les valeurs possibles de Type=. | ||
Type=forking | Type=forking | ||
Ligne 201: | Ligne 271: | ||
RuntimeDirectory=neo4j | RuntimeDirectory=neo4j | ||
- | #Droits d'accès sur le réperoitre /run/neo4j. | + | #Droits d'accès sur le répertoire /run/neo4j. |
# Utilisateur Groupe Les_autres | # Utilisateur Groupe Les_autres | ||
# rwx rwx --- | # rwx rwx --- | ||
Ligne 239: | Ligne 309: | ||
#Définit des limites logicielles ou matérielles pour le processus exécuté. | #Définit des limites logicielles ou matérielles pour le processus exécuté. | ||
#https://www.freedesktop.org/software/systemd/man/systemd.exec.html# | #https://www.freedesktop.org/software/systemd/man/systemd.exec.html# | ||
- | # Correspond à ulimit -n 60000. | + | # Correspond à ulimit -n 60000. |
# C'est le nombre maximum de fichiers pouvant être ouvert simultanément pour les processus fils du service. | # C'est le nombre maximum de fichiers pouvant être ouvert simultanément pour les processus fils du service. | ||
LimitNOFILE=60000 | LimitNOFILE=60000 | ||
Ligne 258: | Ligne 328: | ||
===== Ressources ====== | ===== Ressources ====== | ||
* [[wpfr>systemd|systemd]] sur Wikipedia en français | * [[wpfr>systemd|systemd]] sur Wikipedia en français | ||
- | * [[http://www.freedesktop.org/wiki/Software/systemd/|Site officiel de systemd]] | + | * [[https://www.freedesktop.org/wiki/Software/systemd/|Site officiel de systemd]] |
- | * [[http://doc.fedora-fr.org/wiki/Systemd|Fedora et systemd]] notamment pour la partie [[#Type de service systemd]] | + | * [[https://doc.fedora-fr.org/wiki/Systemd|Fedora et systemd]] notamment pour la partie [[#Type de service systemd]] |
* [[https://docs.syncthing.net/users/autostart.html#using-systemd|Documentation de Syncthing]] Créer un service systemd pour lancer Syncthing au démarrage (en anglais) | * [[https://docs.syncthing.net/users/autostart.html#using-systemd|Documentation de Syncthing]] Créer un service systemd pour lancer Syncthing au démarrage (en anglais) | ||
* [[https://deluge.readthedocs.io/en/latest/how-to/systemd-service.html|Documentation de Deluge]] Créer un service systemd pour lancer Deluge au démarrage (en anglais) | * [[https://deluge.readthedocs.io/en/latest/how-to/systemd-service.html|Documentation de Deluge]] Créer un service systemd pour lancer Deluge au démarrage (en anglais) |