GNU/Linux >> Tutoriels Linux >  >> Linux

Systemd avec plusieurs execStart

si Type=simple dans votre fichier unité, vous ne pouvez spécifier qu'un seul ExecStart, mais vous pouvez ajouter autant de ExecStartPre , ExecStartPost , mais rien de tout cela n'est adapté aux commandes de longue durée, car elles sont exécutées en série et tout ce qu'un démarrage est tué avant de démarrer le suivant.

Si Type=oneshot vous pouvez spécifier plusieurs ExecStart, ils s'exécutent en série et non en parallèle.

Si vous souhaitez exécuter plusieurs unités en parallèle, vous pouvez faire plusieurs choses :

S'ils diffèrent sur 1 paramètre

Vous pouvez utiliser des unités de modèle, vous créez donc un /etc/systemd/system/[email protected] . REMARQUE : (le @ est important).

[Unit]
Description=script description %I

[Service]
Type=simple
ExecStart=/script.py %i
Restart=on-failure

[Install]
WantedBy=multi-user.target

Et puis vous exécutez :

$ systemctl start [email protected] [email protected]

ou...

Dépendances cibles

Vous pouvez créer plusieurs unités associées à une seule cible :

#/etc/systemd/system/bar.target
[Unit]
Description=bar target
Requires=multi-user.target
After=multi-user.target
AllowIsolate=yes

Et puis vous modifiez simplement vos unités .service pour qu'elles soient WantedBy=bar.target comme :

#/etc/systemd/system/[email protected]
[Unit]
Description=script description %I

[Service]
Type=simple
ExecStart=/script.py %i
Restart=on-failure

[Install]
WantedBy=bar.target

Ensuite, il vous suffit d'activer les services foo que vous souhaitez en parallèle et de démarrer la barre cible comme ceci :

$ systemctl daemon-reload
$ systemctl enable [email protected]
$ systemctl enable [email protected]
$ systemctl start bar.target

REMARQUE : que cela fonctionne avec n'importe quel type d'unités, pas seulement les unités de modèle.


Vous pouvez utiliser ExecStartPre ou ExecStartPost pour l'un des scripts

[Unit]
Description=script description

[Service]
Type=simple
ExecStartPre=/script.py parameters1
ExecStart=/script.py parameters2
Restart=on-failure

[Install]
WantedBy=multi-user.target

Linux
  1. Utilisation de plusieurs modèles à la fois avec la commande Sed

  2. CentOS / RHEL 7 :Comment changer les niveaux d'exécution (cibles) avec systemd

  3. Trier plusieurs clés avec le tri Unix

  4. Traitement du signal avec plusieurs threads sous Linux

  5. Trier des nombres avec plusieurs décimales en bash

Comment exécuter des conteneurs en tant que service Systemd avec Podman

Désencombrer la gestion des processus avec ps ou systemd

Gestion des cgroups avec systemd

Recherche de plusieurs motifs (mots) avec ack ?

systemd - Donner à mon service plusieurs arguments

Comment exécuter un script avec systemd juste avant l'arrêt ?