GNU/Linux >> Tutoriels Linux >  >> Linux

Comment redémarrer automatiquement un service en cas d'échec sous Linux

Solution 1 :

Ne répondant qu'à la partie de redémarrage du service. Je suis également tombé sur Monit, mais sur CentOS 7, systemd s'occupe de tout cela pour vous. Il vous suffit d'ajouter ces deux lignes au fichier .service (si elles n'y sont pas déjà) :

Restart=always
RestartSec=3

Voir https://jonarcher.info/2015/08/ensure-systemd-services-restart-on-failure/ pour référence.

Si vous souhaitez créer un service systemd personnalisé, il est assez simple d'écrire votre propre fichier de service. Voir l'exemple ci-dessous, pour un serveur http personnalisé.

Démarrez l'éditeur avec un nouveau fichier de service :

vim /etc/systemd/system/httpd.service

Et ajoutez le contenu suivant, que vous pouvez modifier selon vos besoins :

[Unit]
Description=My httpd Service
After=network.target

[Service]
Type=simple
User=root
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PERLLIB=/perl
ExecStart=/bin/httpd /etc/httpd.conf
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

Je veux qu'il démarre automatiquement au démarrage :

systemctl enable httpd

Informez systemd des changements et démarrez le service :

systemctl daemon-reload
systemctl start httpd

Et maintenant vous pouvez voir le statut :

systemctl status httpd

Pour référence, voir https://scottlinux.com/2014/12/08/how-to-create-a-systemd-service-in-linux-centos-7/

Solution 2 :

monit est un excellent moyen de surveiller et de redémarrer les services lorsqu'ils échouent - et vous finirez probablement par l'utiliser pour d'autres services essentiels (tels qu'Apache). Il y a un bel article sur nixCraft détaillant comment l'utiliser spécifiquement pour les services, bien que monit lui-même a beaucoup plus de fonctions au-delà de cela.

En ce qui concerne l'aspect socket, @galraen a répondu présent.

Solution 3 :

Vous pouvez appeler le setsockopt(2) pour prise d'écoute avec SO_REUSEADDR , vous pourrez donc bind(2) recommencez sans attendre l'expiration de toutes les connexions. Autre possibilité :supprimer les connexions du noyau. FreeBSD a tcpdrop commande pour cela, je ne connais pas Linux.

Solution 4 :

Si votre distribution Linux utilise Upstart au lieu de SysV init, alors le respawn le mot-clé fait cela.

http://upstart.ubuntu.com/cookbook/#respawn


Linux
  1. Comment créer un service Systemd sous Linux

  2. Comment utiliser le chien de garde des logiciels Linux ?

  3. Comment redémarrer le serveur MySQL distant fonctionnant sous Linux Ubuntu ?

  4. Comment programmer un redémarrage sous Linux ?

  5. Comment documenter la configuration du serveur Linux ?

Comment redémarrer les services réseau sous Linux

Comment redémarrer Bluetooth dans Ubuntu 20.04

Comment redémarrer un service via systemctl sous Linux

Comment utiliser systemctl sous Linux

Comment vider le cache DNS sous Linux ?

Comment démarrer, arrêter ou redémarrer les services réseau sur Rocky Linux 8