Partage
  • Partager sur Facebook
  • Partager sur Twitter

Créer un service dans init.d

Sujet résolu
    15 mars 2019 à 12:04:03

    Bonjour,

    Je suis en train de créer un fichier dans init.d pour pouvoir lancer un script php. Pour le faire j'ai chercher sur internet et je regarde également la construction des autres fichiers dans init.d. Tout ce que je met après le case marche bien mais à l'intérieur du case rien ne s’exécute.

    pi@raspberrypi:~ $ sudo service aepr
    [info] Usage: /etc/init.d/aepr {start|stop|restart}.
    pi@raspberrypi:~ $ sudo service aepr start
    Warning: aepr.service changed on disk. Run 'systemctl daemon-reload' to reload units.
    pi@raspberrypi:~ $ sudo su
    root@raspberrypi:/home/pi# systemctl daemon-reload
    root@raspberrypi:/home/pi# exit
    exit
    pi@raspberrypi:~ $ sudo service aepr start
    pi@raspberrypi:~ $ sudo service aepr stop
    pi@raspberrypi:~ $ sudo service aepr restart
    pi@raspberrypi:~ $ cat /etc/init.d/aepr
    #! /bin/sh
    # /etc/init.d/aepr
    #
    
    # Some things that run always
    PIDFILE=/home/pi/prog/_variables/aepr.pid
    DESC="aepr deamon"
    NAME=aepr
    DAEMON=/home/pi/prog/_programmes/event_timer-test.prog.php
    SCRIPTNAME=/etc/init.d/"$NAME"
    PARAMS=""
    
    . /lib/lsb/init-functions
    # Carry out specific functions when asked to by the system
    case "$1" in
      start)
            log_daemon_msg "Starting aepr program" "$NAME"
            start_daemon -p $PIDFILE $DAEMON $PARAMS
            log_end_msg $?
        ;;
      stop)
            log_daemon_msg "Stopping aepr programm" "$NAME"
            killproc -p $PIDFILE $DAEMON
            RETVAL=$?
            [ $RETVAL -eq 0 ] && [-e "$PIDFILE" ] && rm -f $PIDFILE
            log_end_msg $RETVAL
        ;;
      restart)
            log_daemon_msg "Restarting aepr programm" "$NAME"
            $0 stop
            $0 start
            ;;
      *)
        log_action_msg "Usage: /etc/init.d/aepr {start|stop|restart}"
        exit 1
        ;;
    esac
    
    exit 0
    pi@raspberrypi:~ $

    Si vous avez une idée ou des questions de je suis là, merci

    • Partager sur Facebook
    • Partager sur Twitter

    Call me Spaceman

      15 mars 2019 à 16:35:29

      Bonjour,

      Vus que tu as un système qui utilise systemd il vaut mieux faire un service systemd.

      C'est beaucoup simple il te suffit de créer le fichier /etc/systemd/system/aepr.service avec le contenu suivant:

      [Unit]
      Description=Aepr
      After=syslog.target network.target
      
      [Service]
      Type=simple
      ExecStart=/home/pi/prog/_programmes/event_timer-test.prog.php
      
      [Install]
      WantedBy=multi-user.target


      Puis tu mes à jour systemd:

      sudo systemctl daemon-reload

      Et tu lances comme ceci :

      sudo systemctl start aepr.service

      Si tu veux lancer au démarrage :

      sudo systemctl enable aepr.service

      • Partager sur Facebook
      • Partager sur Twitter
        18 mars 2019 à 8:45:39

        Bonjour, 

        En effet cela est beaucoup plus simple. J'ai essayer avec le code que tu me donne mais quand je voulais le lancé rien ce ne se passais j'ai donc continuer à chercher un peu dans cette direction et je suis finalement arrivé à ce que je voulais.

        [Unit]
        Description=Aepr
        After=syslog.target network.target
        
        [Service]
        Type=simple
        PIDFile=/home/pi/prog/_variables/aepr.pid
        ExecStart=/usr/bin/php /home/pi/prog/_programmes/event_timer-test.prog.php
        KillMode=process
        
        [Install]
        WantedBy=multi-user.target
        

        En tout cas merci, je retiendrais systemd qui est bien plus simple que init.d

        EDIT : 

        J'ai en revanche une erreur pour le lancement au démarrage quand je tape la commande que tu me donne, il me retourne une erreur :

        pi@raspberrypi:~ $ sudo systemctl enable aepr.service
        Synchronizing state of aepr.service with SysV service script with /lib/systemd/systemd-sysv-install.
        Executing: /lib/systemd/systemd-sysv-install enable aepr
        update-rc.d: error: aepr Default-Start contains no runlevels, aborting.
        



        -
        Edité par NeoSensEight 18 mars 2019 à 8:51:31

        • Partager sur Facebook
        • Partager sur Twitter

        Call me Spaceman

          18 mars 2019 à 9:04:05

          Il faut que tu enlève ton fichier dans /etc/init.d/aepr. Les deux ne peuvent pas coexister en même temps.
          • Partager sur Facebook
          • Partager sur Twitter

          git is great because Linus did it, mercurial is better because he didn't.

            18 mars 2019 à 9:45:29

            Après avoir supprimer mon fichier dans /etc/init.d je n'ai plus d'erreur mais le script se lance pas au démarrage pour autant.

            J'ai essayer de enable, daemon-reload et reboot plusieurs fois mais rien ne marche. Je peux toujours le lancer avec sudo systemctl start aepr.service et l'arrêter.

            • Partager sur Facebook
            • Partager sur Twitter

            Call me Spaceman

              18 mars 2019 à 10:06:56

              Remonte la sortie de la commande systemctl enable aepr et après avoir reboot. Montre le résultat de systemctl status aepr

              • Partager sur Facebook
              • Partager sur Twitter

              git is great because Linus did it, mercurial is better because he didn't.

                18 mars 2019 à 10:13:55

                Avant le reboot (10h08) :

                pi@raspberrypi:~ $ sudo systemctl enable aepr
                pi@raspberrypi:~ $ sudo systemctl status aepr
                ● aepr.service - Aepr
                   Loaded: loaded (/etc/systemd/system/aepr.service; enabled; vendor preset: enabled)
                   Active: active (running) since Mon 2019-03-18 09:46:46 CET; 21min ago
                 Main PID: 762 (php)
                   CGroup: /system.slice/aepr.service
                           └─762 /usr/bin/php /home/pi/prog/_programmes/event_timer-test.prog.php
                
                Mar 18 09:46:46 raspberrypi systemd[1]: Started Aepr.
                Mar 18 09:46:47 raspberrypi php[762]: Chargement du programme...(5s)
                Mar 18 09:46:52 raspberrypi php[762]: Chargement terminé!
                Mar 18 09:46:52 raspberrypi php[762]: Exécution du programme en cours...
                Mar 18 09:46:52 raspberrypi php[762]: (CTRL+C pour arrêter l'exécution)
                Mar 18 09:57:40 raspberrypi php[762]: Erreur lecture : 20190318095738 -> 20190318095740
                Mar 18 09:57:40 raspberrypi php[762]: Ecart : 1

                Apres reboot (10h09) :

                 sudo systemctl status aepr
                ● aepr.service - Aepr
                   Loaded: loaded (/etc/systemd/system/aepr.service; enabled; vendor preset: enabled)
                   Active: failed (Result: exit-code) since Mon 2019-03-18 10:10:03 CET; 49s ago
                  Process: 511 ExecStart=/usr/bin/php /home/pi/prog/_programmes/event_timer-test.prog.php (code=exited, status=255)
                 Main PID: 511 (code=exited, status=255)
                
                Mar 18 10:09:59 raspberrypi systemd[1]: Started Aepr.
                Mar 18 10:10:03 raspberrypi php[511]: Chargement du programme...(5s)
                Mar 18 10:10:03 raspberrypi php[511]: </br><strong>EXCEPTION $e ==> ##CODE : </strong>2002</br><strong>Error Message
                Mar 18 10:10:03 raspberrypi php[511]: #1 /home/pi/prog/_programmes/event_timer-test.prog.php(32): connexionBDD(Array)
                Mar 18 10:10:03 raspberrypi php[511]: #2 {main}</pre>
                Mar 18 10:10:03 raspberrypi systemd[1]: aepr.service: Main process exited, code=exited, status=255/n/a
                Mar 18 10:10:03 raspberrypi systemd[1]: aepr.service: Unit entered failed state.
                Mar 18 10:10:03 raspberrypi systemd[1]: aepr.service: Failed with result 'exit-code'.

                Grâce à toi je crois comprend, ma base de données n'est pas encore active lors de la tentative de connexion de mon programme. Il me semble qu'il est possible de faire un démarrage retardé. 


                • Partager sur Facebook
                • Partager sur Twitter

                Call me Spaceman

                  18 mars 2019 à 10:38:23

                  Bah pour ça il suffit simplement de faire dépendre le service sur ton pré-requis :)

                  Avec Requires= et After= notamment.

                  Plus d'infos : https://www.freedesktop.org/software/systemd/man/systemd.unit.html

                  • Partager sur Facebook
                  • Partager sur Twitter

                  git is great because Linus did it, mercurial is better because he didn't.

                    18 mars 2019 à 11:11:49

                    Merci à toi j'ai enfin compris !

                    J'ai utilisé After avec mysql.service. Pour résumer mon fichier au final est :

                    [Unit]
                    Description=Aepr
                    After=syslog.target network.target mysql.service
                    
                    [Service]
                    Type=simple
                    PIDFile=/home/pi/prog/_variables/aepr.pid
                    ExecStart=/usr/bin/php /home/pi/prog/_programmes/event_timer-test.prog.php
                    KillMode=process
                    
                    [Install]
                    WantedBy=multi-user.target

                    Ensuite j'ai fais :

                    sudo systemctl daemon-reload
                    sudo systemctl enable aepr
                    sudo reboot

                    et au démarrage le script c'est bien lancé, Merci

                    -
                    Edité par NeoSensEight 18 mars 2019 à 11:12:21

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Call me Spaceman

                    Créer un service dans init.d

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown