Modes de paiement Abuse

Comment effectuer un redémarrage automatique d'un service Linux ?

26.02.2021, 20:42

Il arrive souvent que le service soit interrompu spontanément. L'utilisateur doit s'occuper de son rétablissement manuel. Il n'y a pas de problème en tant que tel, si cela se produit sur un ordinateur domestique. C'est même une bonne chose, car cela permet de déterminer l'état du service, d'identifier les défauts et de les éliminer. Mais la situation est bien différente lorsqu'il s'agit de serveurs et de services VPS, qui doivent fonctionner en permanence pour permettre l'accès à un site web ou à une application. Dans cet article, nous verrons comment configurer le redémarrage automatique des services Linux de plusieurs manières : avec un script de surveillance exécuté périodiquement via cron et dans systemd.

Redémarrage automatique dans systemd

Par défaut, Systemd ne fait rien avec le service s'il se bloque. Mais l'utilisateur peut toujours configurer les paramètres de manière à ce qu'en cas de plantage ou d'arrêt du service, celui-ci soit automatiquement redémarré. Pour ce faire, la directive Restart est utilisée et doit être ajoutée à la section Service. Voyons maintenant un exemple de configuration du redémarrage automatique du service Apache :

$ sudo systemctl edit apache2

[Service]

Restart=on-failure

RestartSec=5s

настройка автоматического перезапуска сервиса Apache:

Ici, RestartSec spécifie le temps d'attente avant le redémarrage du service. Lorsque vous avez terminé, enregistrez les modifications et exécutez la commande daemon-reload pour relire la configuration :

$ sudo systemctl daemon-reload

Ensuite, pour vérifier que tout fonctionne correctement, regardez l'état du processus, terminez le processus avec un signal kill :

 $ sudo systemctl status apache2

$ kill -KILL 32091

Процесс сигналом kill

Vérifiez à nouveau l'état, le processus devrait être en cours d'exécution. Pour que l'initialisation soit exécutée à chaque fois, utilisez une directive spéciale Restart : always. Mais vous devez être très prudent lorsque vous l'utilisez, car elle ne vous permettra pas de mettre fin au processus même si cela est nécessaire. Si le processus se bloque constamment, de sorte qu'il est redémarré, vous pouvez ajouter une limite au nombre de redémarrages dans la section Service :

$ sudo systemctl edit apache2

[Service]

StartLimitIntervalSec=500

StartLimitBurst=5

Restart=on-failure

RestartSec=5s

Лимит на количество перезапусков в секцию Service

Ici, StartLimitBurst et StartLimitIntervalSec indiquent l'importance de redémarrer le service cinq fois, et s'il se plante au cours de ces cinq fois, de le laisser tranquille et de ne pas y toucher. La seconde directive limite les redémarrages du service à 500 secondes.

Redémarrage automatique par script

Il s'agit probablement de la méthode la plus fiable et la plus sûre, qui fonctionne dans toutes les versions de Linux. Dans Apache, il est facile de créer un redémarrage automatique à l'aide d'un script. Pour ce faire, vous devez entrer la commande suivante :

$  sudo vi /usr/local/bin/apache-monitor.sh

#!/bin/bash

ps -A | grep apache2 || systemctl start apache2

Enregistrez le fichier et assurez-vous qu'il est exécutable :

chmod ugo+x /usr/local/bin/apache-monitor.sh

N'oubliez pas d'ajouter une entrée cron pour exécuter le script périodiquement :

$ sudo crontab -e

*/5 * * * * /usr/local/bin/apache-monitor.sh

C'est tout. Oui, la mise en place d'un redémarrage automatique du service n'est pas aussi simple qu'il n'y paraît à première vue. Mais il s'agit d'une capacité importante, et vous devriez donc y prêter attention - cela en vaut vraiment la peine.