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 04/11/2020, 12:28] – [Principes de base] katian | 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 32: | Ligne 31: | ||
| <note help> | <note help> | ||
| Il est possible d' | Il est possible d' | ||
| - | |||
| Pour un service utilisateur il faut ajouter aux commandes le paramètre --user : | Pour un service utilisateur il faut ajouter aux commandes le paramètre --user : | ||
| Ligne 44: | Ligne 42: | ||
| </ | </ | ||
| - | <note importante>il faudrait documenter la commande | + | Pour créer un service utilisateur : |
| + | |||
| + | <code> | ||
| + | systemctl --user edit <nom du service> | ||
| + | </code> | ||
| + | |||
| + | Pour éditer un service utilisateur : | ||
| + | |||
| + | < | ||
| + | systemctl | ||
| + | </ | ||
| + | |||
| + | Pour ajouter une surcharge (drop-in) sur un service utilisateur : | ||
| + | |||
| + | < | ||
| + | systemctl --user edit <nom du service> | ||
| + | </code> | ||
| + | |||
| + | <note important>Attention : pour un service user, il faut remplacer '' | ||
| + | |||
| + | ===== 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 53: | 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 66: | Ligne 90: | ||
| RemainAfterExit=yes | RemainAfterExit=yes | ||
| ExecStart=/ | ExecStart=/ | ||
| - | ExecStop=/ | + | ExecStop=/ |
| </ | </ | ||
| Ligne 101: | Ligne 125: | ||
| [Install] | [Install] | ||
| WantedBy=multi-user.target | WantedBy=multi-user.target | ||
| - | </ | + | </ |
| * '' | * '' | ||
| Ligne 139: | Ligne 163: | ||
| systemctl enable syncthing@Milou.service | systemctl enable syncthing@Milou.service | ||
| </ | </ | ||
| - | ==== Exemple de service cyclique. ==== | + | |
| - | Création du fichier de timer | + | ==== Exemple de service cyclique ==== |
| + | |||
| + | === Service systeme === | ||
| + | |||
| + | Création du fichier de timer | ||
| <file sh / | <file sh / | ||
| [Unit] | [Unit] | ||
| Description=Lance une mise à jour de l' | 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 | 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 | ||
| Ligne 165: | Ligne 193: | ||
| </ | </ | ||
| Avec les commandes de gestion associées | Avec les commandes de gestion associées | ||
| - | < | + | < |
| sudo systemctl start MAJ0.timer | sudo systemctl start MAJ0.timer | ||
| sudo systemctl status MAJ0.timer | sudo systemctl status MAJ0.timer | ||
| </ | </ | ||
| + | === Service utilisateur === | ||
| + | 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 --user enable Alerte.service; | ||
| + | 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 --user enable Alerte.timer; | ||
| + | systemctl --user start Alerte.timer;</ | ||
| + | |||
| + | |||
| ====Exemple de service avancé avec la base graphe neo4j==== | ====Exemple de service avancé avec la base graphe neo4j==== | ||
| Ligne 188: | 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 206: | 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 217: | Ligne 272: | ||
| RuntimeDirectory=neo4j | RuntimeDirectory=neo4j | ||
| - | #Droits d' | + | #Droits d' |
| # Utilisateur | # Utilisateur | ||
| # | # | ||
| Ligne 255: | 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 274: | Ligne 329: | ||
| ===== Ressources ====== | ===== Ressources ====== | ||
| * [[wpfr> | * [[wpfr> | ||
| - | * [[http:// | + | * [[https:// |
| - | * [[http:// | + | * < |
| + | * [[https:// | ||
| * [[https:// | * [[https:// | ||
| * [[https:// | * [[https:// | ||
