Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| creer_un_service_avec_systemd [Le 11/09/2018, 14:46] – correction d'nu FIXME d'après la doc, la balise After n'arrête pas un service si la condition change dans le temps 109.26.134.132 | creer_un_service_avec_systemd [Le 27/05/2026, 19:38] (Version actuelle) – mise en forme krodelabestiole | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| {{tag> | {{tag> | ||
| - | ---- | ||
| ====== Créer un nouveau service avec systemd ====== | ====== Créer un nouveau service avec systemd ====== | ||
| + | |||
| Ce tutoriel décrit la démarche à suivre pour transformer un programme en un service [[: | Ce tutoriel décrit la démarche à suivre pour transformer un programme en un service [[: | ||
| - | |||
| ===== Pré-requis ===== | ===== Pré-requis ===== | ||
| - | | + | |
| + | | ||
| * Savoir utiliser le [[: | * Savoir utiliser le [[: | ||
| * Avoir [[: | * Avoir [[: | ||
| - | |||
| - | |||
| ===== Principes de base===== | ===== Principes de base===== | ||
| + | |||
| Comme [[: | Comme [[: | ||
| Ces fichiers de configuration se trouvent dans **/ | Ces fichiers de configuration se trouvent dans **/ | ||
| Ligne 21: | Ligne 20: | ||
| < | < | ||
| - | Une fois le fichier de configuration de service | + | Une fois le fichier de configuration de service |
| < | < | ||
| Ligne 29: | Ligne 28: | ||
| Pour plus d' | Pour plus d' | ||
| + | |||
| + | <note help> | ||
| + | Il est possible d' | ||
| + | |||
| + | Pour un service utilisateur il faut ajouter aux commandes le paramètre --user : | ||
| + | |||
| + | < | ||
| + | systemctl --user enable <nom du service> | ||
| + | systemctl --user start <nom du service> | ||
| + | systemctl --user status <nom du service> | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | |||
| + | Pour créer un service utilisateur : | ||
| + | |||
| + | < | ||
| + | systemctl --user edit <nom du service> | ||
| + | </ | ||
| + | |||
| + | Pour éditer un service utilisateur : | ||
| + | |||
| + | < | ||
| + | systemctl --user edit <nom du service> | ||
| + | </ | ||
| + | |||
| + | Pour ajouter une surcharge (drop-in) sur un service utilisateur : | ||
| + | |||
| + | < | ||
| + | systemctl --user edit <nom du service> | ||
| + | </ | ||
| + | |||
| + | <note important> | ||
| + | |||
| + | ===== 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' | ||
| + | |||
| + | Les timers remplacent le planificateur de tâches cron sur les systèmes modernes. | ||
| ===== Type de services systemd ===== | ===== Type de services systemd ===== | ||
| Ligne 37: | Ligne 77: | ||
| * 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, | * 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, | ||
| * 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 | + | * 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 |
| ===== Exemples de services et leur fichier de configuration===== | ===== Exemples de services et leur fichier de configuration===== | ||
| Ligne 50: | Ligne 90: | ||
| RemainAfterExit=yes | RemainAfterExit=yes | ||
| ExecStart=/ | ExecStart=/ | ||
| - | ExecStop=/ | + | ExecStop=/ |
| </ | </ | ||
| Ligne 62: | Ligne 102: | ||
| ====Exemple de service de type " | ====Exemple de service de type " | ||
| - | Un exemple est le service deluged qui permet de lancer le service correspondant à la version | + | Un exemple est le service deluged qui permet de lancer le service correspondant à la version |
| <file txt / | <file txt / | ||
| Ligne 85: | Ligne 125: | ||
| [Install] | [Install] | ||
| WantedBy=multi-user.target | WantedBy=multi-user.target | ||
| - | </ | + | </ |
| * '' | * '' | ||
| Ligne 123: | Ligne 163: | ||
| systemctl enable syncthing@Milou.service | systemctl enable syncthing@Milou.service | ||
| </ | </ | ||
| - | ==== Exemple de service cyclique. ==== | + | |
| - | Création du fichier de gestion | + | ==== Exemple de service cyclique ==== |
| + | |||
| + | === Service systeme === | ||
| + | |||
| + | Création du fichier de timer | ||
| <file sh / | <file sh / | ||
| [Unit] | [Unit] | ||
| - | Description=effectue | + | Description=Lance une mise à jour de l' |
| [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 | ||
| # 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 | + | ### voir toutes les possibilités de choix dans ce document |
| [Install] | [Install] | ||
| WantedBy=timers.target | WantedBy=timers.target | ||
| + | </ | ||
| + | Création du fichier de service | ||
| + | <file sh / | ||
| + | [Unit] | ||
| + | Description=Service de mise a jour | ||
| + | After=network.target | ||
| + | |||
| [Service] | [Service] | ||
| - | User=XXXXXXXXX | + | ExecStart=apt-get update && |
| - | Group=users | + | Type=oneshot |
| - | ExecStart=/ | + | </ |
| - | Création du fichier contenant ce qu'il faut faire dans cet exemple | + | |
| - | <file bash / | + | |
| - | #! /bin/sh | + | |
| - | date >/ | + | |
| - | echo "Faire les mises à jour" >>/ | + | |
| - | sudo apt install tototo | + | |
| - | sudo apt autoremove | + | |
| - | echo "Pas encore trouvé pour informer l' | + | |
| - | exit 0 </ | + | |
| Avec les commandes de gestion associées | Avec les commandes de gestion associées | ||
| - | < | + | < |
| + | sudo systemctl start MAJ0.timer | ||
| sudo systemctl status MAJ0.timer | sudo systemctl status MAJ0.timer | ||
| - | sudo systemctl | + | </ |
| - | sudo systemctl | + | === Service utilisateur === |
| - | sudo systemctl enable | + | Création et activation du service |
| + | <code bash>cat <<" | ||
| + | [Unit] | ||
| + | Description=Rappeler que le moment est venu. | ||
| + | [Service] | ||
| + | Type=simple | ||
| + | ExecStart=zenity --warning --text " C'est l' | ||
| + | EOF | ||
| + | sleep 1 | ||
| + | systemctl | ||
| + | systemctl --user start Alerte.service;</ | ||
| + | Création et activation des déclenchements | ||
| + | <code bash>cat <<" | ||
| + | [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 | ||
| + | systemctl --user start Alerte.timer; | ||
| + | |||
| ====Exemple de service avancé avec la base graphe neo4j==== | ====Exemple de service avancé avec la base graphe neo4j==== | ||
| Ligne 174: | Ligne 243: | ||
| # Type de l' | # Type de l' | ||
| - | #Les différents types d' | + | #Les différents types d' |
| # service : pour un service/ | # service : pour un service/ | ||
| # 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 192: | Ligne 261: | ||
| # | # | ||
| [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 203: | Ligne 272: | ||
| RuntimeDirectory=neo4j | RuntimeDirectory=neo4j | ||
| - | #Droits d' | + | #Droits d' |
| # Utilisateur | # Utilisateur | ||
| # | # | ||
| Ligne 221: | Ligne 290: | ||
| ExecReload=/ | ExecReload=/ | ||
| - | #Ne doit pas considérer que le service est actif lorsque le processus neo4j c'est terminé normalement. | + | #Ne doit pas considérer que le service est actif lorsque le processus neo4j s'est terminé normalement. |
| RemainAfterExit=no | RemainAfterExit=no | ||
| Ligne 241: | Ligne 310: | ||
| #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é. | ||
| # | # | ||
| - | # 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 260: | Ligne 329: | ||
| ===== Ressources ====== | ===== Ressources ====== | ||
| * [[wpfr> | * [[wpfr> | ||
| - | * [[http:// | + | * [[https:// |
| - | * [[http:// | + | * < |
| + | * [[https:// | ||
| * [[https:// | * [[https:// | ||
| - | * [[http://dev.deluge-torrent.org/wiki/UserGuide/Service/ | + | * [[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) |
| ---- | ---- | ||
| // | // | ||
