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 07/04/2021, 06:59] katian [Principes de base] création et modification d'un service utilisateur |
creer_un_service_avec_systemd [Le 17/12/2024, 12:10] (Version actuelle) geole [Exemple de service cyclique.] servic utilisateur |
||
|---|---|---|---|
| Ligne 62: | Ligne 62: | ||
| </code> | </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 69: | 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 82: | 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 117: | 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 164: | Ligne 165: | ||
| ==== 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 189: | 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 212: | 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 230: | 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 279: | 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 298: | 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) | ||