Sous Windows, vous pouvez définir ce qui doit se produire si / quand un service échoue. Existe-t-il un moyen standard de réaliser la même chose sous Linux (CentOS en particulier)?
Une plus grande partie de ma question est: comment gérez-vous les sockets qui ont été laissées ouvertes - par exemple dans les états TIME_WAIT, FIN_WAIT1, etc.
Pour le moment, si le service que je développe tombe en panne, je dois attendre que les sockets soient effacées ou changer le port d'écoute avant de pouvoir ensuite le redémarrer manuellement.
Merci de votre aide.
Répondre uniquement à la partie redémarrage du service. J'ai également rencontré Monit, mais sur CentOS 7, systemd s'occupe de tout cela pour vous. Vous avez juste besoin d'ajouter ces deux lignes au fichier .service (si elles ne sont pas déjà là):
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:
Et ajoutez le contenu suivant, que vous pouvez modifier si nécessaire:
Je veux qu'il démarre automatiquement au démarrage:
Informez systemd des modifications et démarrez le service:
Et maintenant, vous pouvez voir le statut:
Pour référence, voir https://scottlinux.com/2014/12/08/how-to-create-a-systemd-service-in-linux-centos-7/
la source
systemd
le gestionnaire de services standard sur les distributions les plus populaires peut le faire pour vous.Vous pouvez appeler la
setsockopt(2)
prise d'écoute avecSO_REUSEADDR
, afin que vous puissiez le faire àbind(2)
nouveau sans attendre l'expiration de toutes les connexions. Autre possibilité: supprimer les connexions du noyau. FreeBSD a unetcpdrop
commande pour cela, je ne sais pas pour Linux.la source
Si votre distribution Linux utilise Upstart au lieu de SysV init, alors le
respawn
mot-clé le fait.http://upstart.ubuntu.com/cookbook/#respawn
la source