• # init.d

    Posté par (site web personnel) . En réponse au message lancer un script php en tant que demon. Évalué à 4.

    Debian 6, c'est pas tout jeune, mais ça doit fonctionner comme ça :
    Imaginons que ton daemon est le script titi.php qui se trouve dans /home/toto, tu vas devoir créer un petit fichier php nommé toto.php pour gérer le lancement et l'arrêt (tu peux tout mettre dans le même script php, mais bon, pourquoi faire bordélique...)
    Tu crées un fichier dans /etc/init.d/toto.sh

    #! /bin/sh
    set -e
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/home/toto
    DESC="toto daemon"
    NAME=toto
    DAEMON=/home/toto/$NAME
    PIDFILE=/var/run/$NAME.pid
    SCRIPTNAME=/etc/init.d/$NAME
    case "1ドル" in
     start)
     echo -n "Starting $DESC: $NAME"
     php /home/toto/toto.php start
     echo "."
     ;;
     stop)
     echo -n "Stopping $DESC: $NAME"
     php /home/toto/toto.php stop
     echo "."
     ;;
     restart|force-reload)
     echo -n "Restarting $DESC: $NAME"
     php /home/toto/toto.php restart
     sleep 1
     echo "."
     ;;
     *)
     echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
     exit 1
     ;;
    esac
    exit 0
    

    Donc dans toto.php, on a :

    <?php
    chdir("/home/toto");
    $ordre = $argv[1];
    $fait = "N";
    if ($ordre == "") $ordre = "START";
    if (strtoupper($ordre) == "START") {
     echo "\r\nDemarrage du daemon titi.\r\n";
     system("php titi.php < /dev/null > /dev/null 2> /dev/null &");
     $fait = "O";
    }
    if (strtoupper($ordre) == "STOP") {
     echo "\r\nArret du daemon titi.\r\n";
     // Là à toi de programmer un truc pour que toto.php sache qu'il doive s'arreter 
     $fait = "O";
    }
    if (strtoupper($ordre) == "RESTART") {
     echo "\r\nRedemarrage du daemon titi.\r\n";
     // Là à toi de programmer un truc pour que toto.php sache qu'il doive s'arreter 
     // puis
     system("php titi.php < /dev/null > /dev/null 2> /dev/null &");
     $fait = "O";
    }
    if ($fait == "N") {
     // affiche l'aide
     echo "\r\nTITI deamon\r\n\r\n";
     echo "commandes :\r\n";
     echo " start : demarre le serveur mail\r\n";
     echo " stop : arrete le serveur mail\r\n";
     echo " restart : arrete puis redemarre le serveur mail\r\n";
     echo " help : cette page d'aide\r\n\r\n";
    }
    ?>
    

    Comme dit dans le code. c'est à toi de voir comme informer titi qu'il doit cesser. Ca peut être par plein de moyens (fichier scruté, telnet, ...).
    Je n'ai pas mis l'option force-reload, tu sauras bien le faire si nécessaire.

    Pour qu'il se lance au (re)démarrage de la machine, faut créer un lien symbolique du fichier sh dans /etc/rc2.d :
    ln -s /etc/init.d/toto.sh /etc/rc2.d/S99toto

    Le S99, c'est pour "Start", et en dernier, ce qui généralement est ok, sauf si tu as besoin qu'il se lance avant d'autres deamons.