GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je configurer un service systemd pour qu'il redémarre périodiquement ?

J'ai vu une solution ici qui semblait élégante, bien qu'un peu détournée. L'idée clé est de créer un service ponctuel déclenché par un minuteur qui en redémarre un autre service.

Pour la minuterie :

[Unit]
Description=Do something daily

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

Pour le service ponctuel :

[Unit]
Description=Restart service

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl try-restart my_program.service

Pour le service ponctuel sur Ubuntu 16.04 LTS :

[Unit]
Description=Restart service

[Service]
Type=oneshot
ExecStart=/bin/systemctl try-restart my_program.service

Cette solution vous permet de tirer parti des minuteries de systemd, y compris la possibilité de redémarrer le service à une heure particulière de la journée, et pas seulement après un certain temps.


Pour la version systemd>=229, il existe une option appelée RuntimeMaxSec , qui met fin au service après qu'il ait fonctionné pendant la période donnée.

par exemple. Pour redémarrer tous les 7 jours :

[Service]
Restart=always
RuntimeMaxSec=7d

Cela me semble plus élégant que d'abuser de Type=notify et WatchdogSec .

systemd fournit un moyen propre d'ajouter et de remplacer des directives dans les fichiers d'unité systemd fournis par les fournisseurs. Les unités d'insertion sont décrites dans man systemd.unit. Par exemple, si vous vouliez redémarrer périodiquement le service foo fourni par un paquet, vous créeriez un fichier nommé /etc/systemd/system/foo.service.d/periodic-restart.conf . Le contenu serait comme indiqué ci-dessus. Ensuite :

 systemctl daemon-reload
 systemctl restart foo

Vous pouvez confirmer que l'unité Drop-In a été chargée car elle sera signalée dans la sortie d'état :

 systemctl status

Enfin, vous pouvez confirmer que la directive a été incluse en recherchant le systemctl show sortie :

 systemctl show foo.service | grep RuntimeMax

La directive rapportée par systemctl show sera "RuntimeMaxUSec`


Linux
  1. Comment utiliser la commande Systemctl pour gérer les services Systemd

  2. Comment créer un service Systemd sous Linux

  3. Comment puis-je redémarrer les services sur les serveurs cPanel ?

  4. Comment rediriger la sortie du service systemd vers un fichier

  5. Comment arrêter le service systemd

Comment démarrer, arrêter ou redémarrer Nginx

Commandes Systemctl pour gérer le service Systemd

Comment démarrer, arrêter ou redémarrer les services dans CentOS 8

Comment redémarrer un service via systemctl sous Linux

Comment redémarrer les services sur la ligne de commande Ubuntu

Comment utiliser systemctl sous Linux