Forum général.cherche-logiciel Controle Port TCP ouvert sous debian

Posté par  .
Étiquettes :
0
18
mar.
2008
Bonjours,

J'ai un question :
J'ai un serveur sous linux Debian 4 qui tourne impec avec plein d'appli dessus qui ouvre des ports en TCP. Certaine de ces applis sont démarrées plusieurs fois et ouvrent des ports differents en fonction du paramétrage. Mais le pb est que de tps en tps une appli plante, donc le port TCP, ouvert par cette appli, se retrouve indisponible. Cela me pose problème car je ne peux surveillez la machine sans arrêt.
Je recherche donc une solution pour en cas de disparition d'un des ports relancer l'appli correspondante (par un simple sript sh)

je connais bien la commande netstat -nlt xxx mais comment en faire un script (de préférence sh ajouter au cron pour controler toutes les 5 minutes) pour vérifier le port xxx et relancer le script sh qui correspond si netstat réponds pas? là est la question...

Si quelqu'un a une idée je suis preneur. Merci d'avance.
  • # mauvais reglage ?

    Posté par  . Évalué à 2.

    si un meme serveur ouvre des ports differents à chaque lancement alors c'est un mauvais serveur :D

    et si un serveur ne sait pas rester en ecoute meme s'il a planté sans se relancer de lui meme c'est, là encore, un mauvais serveur.

    bon une amorce de reponse quand meme.
    - regarde si ton script qui fait serveur n'a pas une option daemon, parfois ca suffit à faire que le serveur se relance automatiquement en cas d'arret

    - sinon tu peux scripter en shell ton netstat pour recuperer (ou pas) le port que tu veux surveiller
  • # grep n'est pas bien ?

    Posté par  . Évalué à 2.

    netstat -anlpt | grep 'xxxx'
  • # fermer le port dans l'appli en attrapant l'erreur

    Posté par  . Évalué à 1.

    Par défaut, quand un programme se termine sans fermer un port qu'il a ouvert, ce port reste dans un état intermédiaire (on le voit avec "netstat", il est en CLOSE_WAIT je crois) pendant une minute ou genre (c'est peut-être configurable dans le noyau).

    Dans mes applis, j'ai rajouté ceci (quand c'est en C bien sûr) :

    int serverSocket = 0; /* variable globale pour être accessible depuis le gestionnaire de signal ci-dessous */

    void mysighandler(int mysig)
    {
    printf("myrcpd: signal %d received\n", mysig);
    if (serverSocket) close(serverSocket);
    exit(0);
    }

    [...]

    signal(SIGINT, mysighandler);
    signal(SIGTERM, mysighandler);
    [...]

    Ça me permet de tuer le démon via un kill/killall (SIGTERM) ou un ctrl-c (SIGINT) et de le relancer tout de suite sans souci.
  • # daemontools ou runit?

    Posté par  (site web personnel) . Évalué à 1.

    Le programme supervise des daemontools http://cr.yp.to/daemontools.html permet de surveiller et relancer un processus qui plante.

    De même runit: http://smarden.org/runit/ (on peut l'utiliser sans remplacer init).

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.