Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

daemon problème au démarrage


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    daemon problème au démarrage
    Bonjour

    Voila j'essaye sur un carte type Rapsberry (Olimex) de lancer un script python au démarrage de ma carte.
    J'ai donc suivis les instructions pour créer un deamon sur linux, le script fonctionne bien et le service aussi lorsque je lance /etc/init.d/blinkled start mon script se lance correctement et la led sur ma carte clignote normalement .
    Jusque la tout vas bien.Par contre lorsque je redémarre la carte pour voir si le script se lance bien au démarrage la led clignote genre 10 sec et s'arrête. J'ai l'impression qu'elle s'arrête lorsque j'arrive au moment du log.
    Mon système démarre en runlevel 2 et si je regarde dans /etc/rc2.d/ je vois bien S01blinkled

    Une petit idée ?
    Merci

  2. #2
    Expert éminent sénior
    dejà fais en sorte que ton script genere du log pour analyse.

    si ce dernier est allimenté c'est qu'il démarre bien

    assures toi aussi d'avoir bien les bons ordres de démarrage et que bien sur tu aies les bons runlevels et qu'il n'est pas tué par un autre runlevel

  3. #3
    Expert éminent sénior
    Bonjour

    C'est plus un problème concernant la partie admin du fofo que la partie script shell. Déjà as-tu vraiment besoin que ton blinkled se lance en premier ???

    Ceci dit, l'administration du init a un petit peu évolué depuis l'époque où il suffisait de rajouter un lien Sxx. Tu as maintenant dans le dossier init.d 3 fichiers ".depend.boot", ".depend.start" et ".depend.stop" lesquels jouent aussi un rôle dans le démarrage des daemon (enfin c'est comme ça sur Debian). Moi aussi j'avais eu des problèmes quand j'ai installé mon serveur Postgres. Le script était bien dans init.d, les liens des rcX.d étaient bien faits mais il ne se lançait toujours pas. C'est ensuite que j'ai vu ces fichiers et qu'en demandant depuis l'IHM graphique de gnome de lancer le service Postgres au démarrage que j'ai vu apparaitre postgres dans .depend.start et .depend.stop et que mon serveur s'est enfin lançé...
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  4. #4
    Nouveau membre du Club
    Merci pour vos infos .
    J'ai testé vos recommandations ce matin.
    J'ai rajouter de quoi générer des logs et ceux -ci ne me renvoie aucune erreurs mais confirme bien que mon script se lance au démarrage (il tourne environs 10 sec).
    Pour l'ordre de démarrage je ne vois pas trop comment faire pour avoir un aperçus clair. Avec la commande runlevel j'ai le retour suivant :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    #runlevel
    #N 2


    je suis donc en runlevel 2 si je comprend bien.J'ai essayé de modifier le fichier "S01blinkled" par "S20blinkled" dans /etc/rc2.d/ pour que celui-ci démarre en dernier mais le résultat est le même .

    Les seuls runlevels qui semble tuer mon script sont le runlevel 1 et 6 j'ai supprimé le K01blinkled dans /etc/rc1.d toujours le même résultat .

    Au sujet des .depend.start-boot-stop je ne comprend pas encore leurs fonctionnements je googlise tout ça mais si tu a plus d'info je suis preneur Merci

    Encore désolé si mon sujet n'est pas dans la bonne section du forum ,faut-il que je la déplace ?

    Merci

  5. #5
    Expert éminent
    Hello,

    Peux-tu lister le contenu de ton repertoire rc2.d stp?

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    ls -l /etc/rc2.d/


    Peux-tu également montrer le contenu de ton script python?

    Merci
    Alea Jacta Test!

  6. #6
    Expert éminent sénior
    Citation Envoyé par habanas Voir le message
    J'ai rajouter de quoi générer des logs et ceux -ci ne me renvoie aucune erreurs mais confirme bien que mon script se lance au démarrage (il tourne environs 10 sec).
    Donc ce n'est plus un souci de rc.d et init.d puisqu'il se lance normalement. Faut juste trouver qu'est-ce qui le fait arrêter. Et c'est vrai qu'avoir le contenu de rc2.d et celui du script nous aidera.

    Autre chose qui nous aidera: c'est que tu nous dises ce qui se passe quand tu lances la commande /etc/rc2.d/S01blinklead start...

    Citation Envoyé par habanas Voir le message
    Pour l'ordre de démarrage je ne vois pas trop comment faire pour avoir un aperçus clair. Avec la commande runlevel j'ai le retour suivant :

    Je parlais du S01 qui le place alors avant le S02...

    Citation Envoyé par habanas Voir le message
    j'ai supprimé le K01blinkled dans /etc/rc1.d toujours le même résultat .
    C'était inutile. Les K sont lancés lorsque la machine s'arrête, afin justement de pouvoir arrêter proprement les daemons. Ils n'ont aucune influence lors du démarrage...

    Citation Envoyé par habanas Voir le message
    Au sujet des .depend.start-boot-stop je ne comprend pas encore leurs fonctionnements
    Moi non plus mais ça n'a plus d'importance puisqu'il est maintenant établi que le programme se lance.

    Citation Envoyé par habanas Voir le message
    Encore désolé si mon sujet n'est pas dans la bonne section du forum ,faut-il que je la déplace ?
    Ben le problème c'est que la population de cette section n'est pas forcément la mieux qualifiée pour t'aider. Toutefois comme on est tous plus ou moins admin...
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  7. #7
    Nouveau membre du Club
    Effectivement j'aurais peut etre due commencer par ça :

    #ls -l /etc/rc2.d/

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    -rw-r--r-- 1 root root 677 Feb  8  2013 README
    lrwxrwxrwx 1 root root  18 Aug 29 09:58 S01blinkled -> ../init.d/blinkled
    lrwxrwxrwx 1 root root  18 Apr 16  2013 S01bootlogs -> ../init.d/bootlogs
    lrwxrwxrwx 1 root root  14 Jan  1  1970 S01cron -> ../init.d/cron
    lrwxrwxrwx 1 root root  14 Jun  7  2013 S01dbus -> ../init.d/dbus
    lrwxrwxrwx 1 root root  15 Jan  1  1970 S01exim4 -> ../init.d/exim4
    lrwxrwxrwx 1 root root  18 Aug 11 15:49 S01fcgiwrap -> ../init.d/fcgiwrap
    lrwxrwxrwx 1 root root  17 Jun  7  2013 S01hddtemp -> ../init.d/hddtemp
    lrwxrwxrwx 1 root root  17 Aug 11 15:02 S01hostapd -> ../init.d/hostapd
    lrwxrwxrwx 1 root root  13 Jun  7  2013 S01lpd -> ../init.d/lpd
    lrwxrwxrwx 1 root root  14 Apr 16  2013 S01motd -> ../init.d/motd
    lrwxrwxrwx 1 root root  15 Aug 11 15:43 S01nginx -> ../init.d/nginx
    lrwxrwxrwx 1 root root  13 Apr 16  2013 S01ntp -> ../init.d/ntp
    lrwxrwxrwx 1 root root  15 Jul 17 09:32 S01olsrd -> ../init.d/olsrd
    lrwxrwxrwx 1 root root  18 Aug 11 15:35 S01php5-fpm -> ../init.d/php5-fpm
    lrwxrwxrwx 1 root root  15 Jun  7  2013 S01rsync -> ../init.d/rsync
    lrwxrwxrwx 1 root root  13 Apr 16  2013 S01ssh -> ../init.d/ssh
    lrwxrwxrwx 1 root root  14 Jan  1  1970 S01sudo -> ../init.d/sudo
    lrwxrwxrwx 1 root root  17 Jun  7  2013 S02lightdm -> ../init.d/lightdm
    lrwxrwxrwx 1 root root  15 Jun  7  2013 S02saned -> ../init.d/saned
    lrwxrwxrwx 1 root root  18 Aug 27 09:42 S03rc.local -> ../init.d/rc.local
    lrwxrwxrwx 1 root root  19 Aug 27 09:42 S03rmnologin -> ../init.d/rmnologin


    et voila le code python

    # /usr/bin/blinkled


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #!/usr/bin/python
    # coding: utf-8
    from time import sleep
    from A10Lime import *
     
    #initialize module
    init() #initialisation I/O 
    #set pin as output
    if getcfg(PH2) == INPUT:
        setcfg(PH2, OUTPUT)
     
    while True:
        sleep(0.5)
        output(PH2, HIGH)
     
        sleep(0.5)
        output(PH2, LOW)



    et enfin le script pour démarrer le daemon :

    #/etc/init.d/blinkled
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
     
    #! /bin/sh
    ### BEGIN INIT INFO
    # Provides:          skeleton
    # Required-Start:    $remote_fs $syslog
    # Required-Stop:     $remote_fs $syslog
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: Example initscript
    # Description:       This file should be used to construct scripts to be
    #                    placed in /etc/init.d.
    ### END INIT INFO
     
    # Author: Foo Bar <foobar@baz.org>
    #
    # Please remove the "Author" lines above and replace them
    # with your own name if you copy and modify this script.
     
    # Do NOT "set -e"
     
    # PATH should only include /usr/* if it runs after the mountnfs.sh script
    PATH=/sbin:/usr/sbin:/bin:/usr/bin
    DESC="Lance le script pour faire clignoté les led"
    NAME=blinkled
    DAEMON=/usr/bin/$NAME
    DAEMON_ARGS=""
    PIDFILE=/var/run/$NAME.pid
    SCRIPTNAME=/etc/init.d/$NAME
     
    # Exit if the package is not installed
    [ -x "$DAEMON" ] || exit 0
     
    # Read configuration variable file if it is present
    [ -r /etc/default/$NAME ] && . /etc/default/$NAME
     
    # Load the VERBOSE setting and other rcS variables
    . /lib/init/vars.sh
     
    # Define LSB log_* functions.
    # Depend on lsb-base (>= 3.2-14) to ensure that this file is present
    # and status_of_proc is working.
    . /lib/lsb/init-functions
     
    #
    # Function that starts the daemon/service
    #
    do_start()
    {
            # Return
            #   0 if daemon has been started
            #   1 if daemon was already running
            #   2 if daemon could not be started
            start-stop-daemon --start --quiet --background --make-pidfile --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
                    || return 1
            start-stop-daemon --start --quiet --background --make-pidfile --pidfile $PIDFILE --exec $DAEMON -- \
                    $DAEMON_ARGS \
                    || return 2
            # Add code here, if necessary, that waits for the process to be ready
            # to handle requests from services started subsequently which depend
            # on this one.  As a last resort, sleep for some time.
    }
     
    #
    # Function that stops the daemon/service
    #
    do_stop()
    {
            # Return
            #   0 if daemon has been stopped
            #   1 if daemon was already stopped
            #   2 if daemon could not be stopped
            #   other if a failure occurred
            start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
            RETVAL="$?"
            [ "$RETVAL" = 2 ] && return 2
            # Wait for children to finish too if this is a daemon that forks
            # and if the daemon is only ever run from this initscript.
            # If the above conditions are not satisfied then add some other code
            # that waits for the process to drop all resources that could be
            # needed by services started subsequently.  A last resort is to
     # sleep for some time.
            start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
            [ "$?" = 2 ] && return 2
            # Many daemons don't delete their pidfiles when they exit.
            rm -f $PIDFILE
            return "$RETVAL"
    }
     
    #
    # Function that sends a SIGHUP to the daemon/service
    #
    do_reload() {
            #
            # If the daemon can reload its configuration without
            # restarting (for example, when it is sent a SIGHUP),
            # then implement that here.
            #
            start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
            return 0
    }
    case "$1" in
      start)
            [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
            do_start
            case "$?" in
                    0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                    2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
            esac
            ;;
      stop)
            [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
            do_stop
            case "$?" in
                    0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                    2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
            esac
            ;;
      status)
            status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
            ;;
      #reload|force-reload)
            #
            # If do_reload() is not implemented then leave this commented out
            # and leave 'force-reload' as an alias for 'restart'.
            #
            #log_daemon_msg "Reloading $DESC" "$NAME"
            #do_reload
            #log_end_msg $?
            #;;
      restart|force-reload)
            #
            # If the "reload" option is implemented then remove the
            # 'force-reload' alias
            #
            log_daemon_msg "Restarting $DESC" "$NAME"
            do_stop
            case "$?" in
              0|1)
                    do_start
                    case "$?" in
                            0) log_end_msg 0 ;;
                            1) log_end_msg 1 ;; # Old process is still running
                            *) log_end_msg 1 ;; # Failed to start
                    esac
                    ;;
              *)
                    # Failed to stop
                    log_end_msg 1
                    ;;
            esac
            ;;
      *)
            #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
            echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
            exit 3
            ;;
    esac
     
    :

  8. #8
    Nouveau membre du Club
    Petit rajout pour toi Sve@r

    Lorsque je lance la commande

    #etc/rc2.d/blinkled start

    La led clignote en continue même après 5 min

    En essayant de changer l'ordre d'exécution du script passer de S01 a S20 cela ne change rien au boot la led s'arrête de clignoter en arrivant au moment du log
    (Pour changer la valeur de S01 à S20 je fais un simple mv S01blinkled S20blinkled peut être un problème avec les liens ???)

    pour la suppression du K01blinkled je m'en doutais mais bon en désespoir j'ai essayé .

  9. #9
    Expert éminent
    Ok merci pour les infos,

    Pourrais-tu nous montrer le contenu du fichier suivant stp?

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    lrwxrwxrwx 1 root root  18 Aug 27 09:42 S03rc.local -> ../init.d/rc.local
    Alea Jacta Test!

  10. #10
    Nouveau membre du Club
    Citation Envoyé par Mygale1978 Voir le message
    Ok merci pour les infos,

    Pourrais-tu nous montrer le contenu du fichier suivant stp?

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    lrwxrwxrwx 1 root root  18 Aug 27 09:42 S03rc.local -> ../init.d/rc.local
    voila voila le résultat

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    #! /bin/sh
    ### BEGIN INIT INFO
    # Provides:          rc.local
    # Required-Start:    $all
    # Required-Stop:
    # Default-Start:     2 3 4 5
    # Default-Stop:
    # Short-Description: Run /etc/rc.local if it exist
    ### END INIT INFO
     
     
    PATH=/sbin:/usr/sbin:/bin:/usr/bin
     
    . /lib/init/vars.sh
    . /lib/lsb/init-functions
     
    do_start() {
            if [ -x /etc/rc.local ]; then
                    [ "$VERBOSE" != no ] && log_begin_msg "Running local boot scripts (/etc/rc.local)"
                    /etc/rc.local
                    ES=$?
                    [ "$VERBOSE" != no ] && log_end_msg $ES
                    return $ES
            fi
    }
     
    case "$1" in
        start)
            do_start
            ;;
        restart|reload|force-reload)
            echo "Error: argument '$1' not supported" >&2
            exit 3
            ;;
        stop)
            ;;
        *)
            echo "Usage: $0 start|stop" >&2
            exit 3
            ;;
    esac

  11. #11
    Nouveau membre du Club
    alors suite a ta demande Mygale1978 j'ai essayer de modifier le fichier

    /etc/rc2.d/S03rc.local pour rediriger les sortie

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    echo "Error: argument '$1' not supported" >&2
    echo "Usage: $0 start|stop" >&2


    en ajoutant a la fin >/var/log/meslog soit:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    echo "Error: argument '$1' not supported" >&2>/var/log/meslog
    echo "Usage: $0 start|stop" >&2>/var/log/meslog


    en faisant ceci pardonnez mes faible connaissances en script shell je provoque une erreur sur rc.local au démarrage visible sur l'UART

    startpar: service(s) returned failure: rc.loval ... failed!

    MAIS maintenant j'ai mon script blinkled qui tourne sans discontinuer, bon je comprend pas pourquoi mais on avance. Maintenant si on peu m'expliquer le pourquoi du comment ?

    merci

  12. #12
    Expert éminent sénior
    Bonjour,

    en ajoutant a la fin >/var/log/meslog soit:
    Pour ajouter à la fin c'est
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  13. #13
    Nouveau membre du Club
    Merci Flodelarab
    j'ai du coup modifier le ">" qu'il me manquais mais cela fais toujours planter mon rc.local du coup mon script fonctionne bien .
    Par contre je ne comprend pas pourquoi quand mon rc.local ne plante pas mon script est stoppé ? une petite idée ?
    Merci

###raw>template_hook.ano_emploi###