IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

Crontab, arrêt brutal d'un script


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2016
    Messages : 7
    Par défaut Crontab, arrêt brutal d'un script
    Bonjour,

    J'ai un souci sur un script que l'execute quotidiennement avec crontab.

    Voici le cron utilisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    # m h  dom mon dow   command
    0 8 * * * /home/dhs/dhs/kmra/scriptExp/kmra_exp.sh 60 180000 &
    le second dhs/ est un lien vers un dossier sur un disque externe.
    les droits sur le lien sont : 777
    les droits sur le montage du disque sont : 700

    Ainsi que le code du script en question :
    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
     
    #!/bin/bash
     
    # on récupère les variables globales
    # et les fonctions de base
    . envi.sh
    . fctn.sh
     
    DHSLog BeginTask $0
     
    if [ $# -ne 2 ]
    	then
    	DHSLog Error "kmra_exp.sh needs 2 arguments, delay between 2 shot and time to end HHMMSS"
    	DHSLog EndTask $0
    	exit
    fi
     
    # le script ne doit fonctionner que la semaine (v1.0)
    jourDeLaSemaine=$(date '+%u')
     
    if [ $jourDeLaSemaine -eq 6 ] || [ $jourDeLaSemaine -eq 7 ]
    	then
    	DHSLog Warning "kmra_exp.sh doesn't work at week-end" "CR=4"
    	DHSLog EndTask $0
    	exit
    fi
     
     
    # creation du dossier de sauvegarde des images
    CreateDir "$KMRA_DIR_ARCHIVES"
     
    if [ ! -e "$KMRA_DIR_ARCHIVES/$(date '+%Y')/$(date '+%m')/$(date '+%d')" ]
    	then
    	DHSLog Error "kmraDir failed, $0 stopped"
    	DHSLog EndTask $0
    	exit
    fi
     
    DHSLog Info "Fin des vérifications, lancement de la prise de vue"
    # variables
    refresh=$1
    end=$2
    camera=reb
     
    DHSLog Info "refresh $refresh | end $end | camera $camera | dir_script $KMRA_DIR_SCRIPT"
    # debut de la prise de vue sur les cameras
    "${$KMRA_DIR_SCRIPT/kmra.sh}" $refresh $end $camera
     
    # on duplique les fichiers de la journée
    # dans le dossier temporaire
     
    # TODO
    DHSLog EndTask $0
    Le script s'execute jusque la ligne "camera=reb" mais n'execute pas le script $KMRA_DIR_SCRIPT/kmra.sh $refresh $end $camera et s'arrête.

    Si je lance mon script manuellement, tout fonctionne correctement, le cron est bien défini pour le bon utilisateur.
    je n'ai pas d'erreur dans les log de cron, pas d'erreur en sortie de mon script.
    Les variables sont bien définit au moment de l'appel.

    Je pense que le soucis vient de l'appel du script mais je ne sais pas comment faire autrement

    Le script appelé a les droits 754.

    Une idée ?

    Cordialement

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Bonjour,

    Le script s'execute jusque la ligne "camera=reb"
    comment sais-tu que cette ligne est exécutée ?
    y aurait-il dans le script kmra.sh une commande qui ne serait pas dans le PATH par défaut.

    accessoirement, la "non-exécution le week-end" peut-être paramétrée dans la crontab.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2016
    Messages : 7
    Par défaut
    Je ne suis pas sur qu'il n'exécute pas l'appel du script mais en tout cas, j'avais mis une log juste avant avec les variables nécessaires, elle s'affichaient bien.
    Au début du script kmra.sh il y a une log qui indique que le script commence.
    Cette log n'apparait pas si c'est cron qui exécute.

    Merci pour l'info sur cron et les weekend je vais lire la d'oc sur ce sujet.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par DarkChyper Voir le message
    Une idée ?
    C'est peut-être une fausse piste, mais ça peut valoir le coup de vérifier!

    Dans ton post original, tel qu'il apparaît sur developpez.net, la dernière ligne me semble bizarre!

    La ligne n°44 contient le commentaire # debut de la prise de vue sur les cameras, mais la ligne suivante $KMRA_DIR_SCRIPT/kmra.sh $refresh $end $camera (dont tu dis qu'elle n'est pas exécutée) est la seule à ne pas avoir de numéro

    Y aurait-il un RETURN à la place d'un LINE FEED en ligne 44 ou un autre problème (genre caractère invisible)?

    Pour vérifier: od -c kmra_exp.sh par exemple.

    Sinon, il y a aussi une petite erreur dans le script: la variable KMRA_DIR_SCRIPT n'est pas encadrée de guillemets, ce qui peut éventuellement (mais pas toujours) poser des problèmes. Essaie de remplacer par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "${KMRA_DIR_SCRIPT}/kmra.sh" $refresh $end $camera
    Et, à part ça, il faudrait peut-être nous montrer le code de "kmra.sh".

    Et enfin, attention! Ce fichier "kmra.sh" est exécuté dans un sous-shell par "kmra_exp.sh", et non "sourcé" (comme l'étaient "envi.sh" et "fctn.sh")!
    En conséquence, les fonctions comme "DHSLOG" (définies grâce au "sourçage" de "fctn.sh") ne sont pas accessibles dans "kmra.sh".

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2016
    Messages : 7
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Pour vérifier: od -c kmra_exp.sh par exemple.
    J'ai exécuté la commande et voici ce que j'ai eu :
    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
     
    0002200   C   R   I   P   T   "  \n   #       d   e   b   u   t       d
    0002220   e       l   a       p   r   i   s   e       d   e       v   u
    0002240   e       s   u   r       l   e   s       c   a   m   e   r   a
    0002260   s  \n   "   $   {   $   K   M   R   A   _   D   I   R   _   S
    0002300   C   R   I   P   T   /   k   m   r   a   .   s   h   }   "    
    0002320   $   r   e   f   r   e   s   h       $   e   n   d       $   c
    0002340   a   m   e   r   a  \n  \n   #       o   n       d   u   p   l
    0002360   i   q   u   e       l   e   s       f   i   c   h   i   e   r
    0002400   s       d   e       l   a       j   o   u   r   n 303 251   e
    0002420  \n   #       d   a   n   s       l   e       d   o   s   s   i
    0002440   e   r       t   e   m   p   o   r   a   i   r   e  \n  \n   #
    0002460       T   O   D   O  \n   D   H   S   L   o   g       E   n   d
    0002500   T   a   s   k       $   0  \n
    0002510
    J'ai bien un \n juste avant l'appel du script.

    Citation Envoyé par jack-ft Voir le message
    Sinon, il y a aussi une petite erreur dans le script: la variable KMRA_DIR_SCRIPT n'est pas encadrée de guillemets, ce qui peut éventuellement (mais pas toujours) poser des problèmes. Essaie de remplacer par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "${KMRA_DIR_SCRIPT}/kmra.sh" $refresh $end $camera
    J'ai essayé ca, sans résultat.

    J'ai modifié mon premier post car j'avais fait une erreur de copier coller sur le cron et oublié la shebang du script kmra_exp.sh
    J'ai mis à jour ce code pour être raccord avec les dernières modification effectuées (log et les ").

    Voici le code du script kmra.sh
    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
     
    #!/bin/sh
     
    # on récupère les variables globales
    # et les fonctions de base
    . envi.sh
    . fctn.sh
     
    DHSLog BeginTask $0
     
    path=$KMRA_DIR_ARCHIVES/$(date '+%Y')/$(date '+%m')/$(date '+%d')
    refresh=$1
    end=$2
    camera=$3
     
    temps=$(date '+%H%M%S')
     
    DHSLog Info "Début du script de prise de vue automatique de la camera $camera"
     
    while [ $temps -le $end ]
    	do
    		echo $REB_SERVICE
    		retour=`ssh $LOGIN@$camera "$REB_SERVICE takeShot 1280 976 $path"`
     
    		sleep $refresh
    		temps=$(date '+%H%M%S')
    		# on met les droits sur tous les fichiers
    		chmod 666 $path/*.jpg
     
    	done
     
    DHSLog Info "Fin de la boucle de prise de vue pour la camera $camera"
     
    DHSLog EndTask $0
    exit
    Voici les logs que j'ai eu ce matin via ma fonction DHSLog :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    20160224:080001 : /home/dhs/dhs/kmra/scriptExp/kmra_exp.sh : ----- Begining of Task /home/dhs/dhs/kmra/scriptExp/kmra_exp.sh -----
    20160224:080001 : /home/dhs/dhs/kmra/scriptExp/kmra_exp.sh : Info Creation du dossier du jour : /mnt/dhsnas/kmra/archives/2016/02/24
    20160224:080001 : /home/dhs/dhs/kmra/scriptExp/kmra_exp.sh : Info Fin des vérifications, lancement de la prise de vue
    20160224:080001 : /home/dhs/dhs/kmra/scriptExp/kmra_exp.sh : Info refresh 60 | end 180000 | camera reb | dir_script /mnt/dhsnas/kmra/script
    20160224:080001 : /home/dhs/dhs/kmra/scriptExp/kmra_exp.sh : ----- End of Task /home/dhs/dhs/kmra/scriptExp/kmra_exp.sh -----
    /home/dhs/dhs/kmra/ et /mnt/dhsnas/kmra/ sont deux chemins pour le même dossier (je devrais d’ailleurs harmoniser un peu tout ça)

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    place ce code sous le shebang de chaque script (d'ailleurs, pourquoi deux scripts ? ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    exec 2>"/tmp/${0##*/}.log"
    set -x
    et envoie-nous le contenu des deux fichiers logs, on y verra plus clair, je crois.

    pourquoi #2 :
    pourquoi lancer le script "appelant", en arrière-plan (&) dans la crontab ? cron est déjà en arrière-plan!
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2016
    Messages : 7
    Par défaut
    Ok je vais tester cela.

    Pour l'arrière plan avec crontab, c'est une mauvaise habitude Pourquoi 2 script ? le but, a terme, est d'avoir plusieurs caméra chacune sur un raspberry différent. le script exp lancera x fois le script 2 à chaque fois pour une camera différente. De plus le script exp n'est pas terminé, il enchainera avec l'appels d'autres script pour la suite du traitement.

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2016
    Messages : 7
    Par défaut
    C'est effectivement très parlant :
    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
     
    + . envi.sh
    ++ export DHS_DIR_TEMP=/mnt/dhstmp
    ++ DHS_DIR_TEMP=/mnt/dhstmp
    ++ export DHS_DIR_SERV=/mnt/dhsnas
    ++ DHS_DIR_SERV=/mnt/dhsnas
    ++ export LOGIN=dhs
    ++ LOGIN=dhs
    ++ export DHS_DIR_LOG=/mnt/dhsnas/log
    ++ DHS_DIR_LOG=/mnt/dhsnas/log
    ++ export DHS_TYP_OUT=0
    ++ DHS_TYP_OUT=0
    +++ date +%Y%m%d
    ++ export DHS_FIC_LOG=/mnt/dhsnas/log/DHSLog.20160224.log
    ++ DHS_FIC_LOG=/mnt/dhsnas/log/DHSLog.20160224.log
    ++ export REB_SERVICE=/darkfront/darkService.sh
    ++ REB_SERVICE=/darkfront/darkService.sh
    ++ export KMRA_DIR_SCRIPT=/mnt/dhsnas/kmra/script
    ++ KMRA_DIR_SCRIPT=/mnt/dhsnas/kmra/script
    ++ export KMRA_DIR_SCRIPTEXP=/mnt/dhsnas/kmra/scriptExp
    ++ KMRA_DIR_SCRIPTEXP=/mnt/dhsnas/kmra/scriptExp
    ++ export KMRA_DIR_ARCHIVES=/mnt/dhsnas/kmra/archives
    ++ KMRA_DIR_ARCHIVES=/mnt/dhsnas/kmra/archives
    + . fctn.sh
    + DHSLog BeginTask /home/dhs/dhs/kmra/scriptExp/kmra_exp.sh
    ++ date +%Y%m%d:%H%M%S
    + dateheure=20160224:121602
    + '[' 0 -eq 0 ']'
    + case $1 in
    + echo '20160224:121602 : /home/dhs/dhs/kmra/scriptExp/kmra_exp.sh : ----- Begining of Task /home/dhs/dhs/kmra/scriptExp/kmra_exp.sh -----'
    + '[' 2 -ne 2 ']'
    ++ date +%u
    + jourDeLaSemaine=3
    + '[' 3 -eq 6 ']'
    + '[' 3 -eq 7 ']'
    + CreateDir /mnt/dhsnas/kmra/archives
    ++ date +%Y
    + annee=/mnt/dhsnas/kmra/archives/2016
    ++ date +%m
    + mois=/mnt/dhsnas/kmra/archives/2016/02
    ++ date +%d
    + jour=/mnt/dhsnas/kmra/archives/2016/02/24
    + '[' '!' -e /mnt/dhsnas/kmra/archives/2016 ']'
    + '[' '!' -e /mnt/dhsnas/kmra/archives/2016/02 ']'
    + '[' '!' -e /mnt/dhsnas/kmra/archives/2016/02/24 ']'
    ++ date +%Y
    ++ date +%m
    ++ date +%d
    + '[' '!' -e /mnt/dhsnas/kmra/archives/2016/02/24 ']'
    + DHSLog Info 'Fin des vérifications, lancement de la prise de vue'
    ++ date +%Y%m%d:%H%M%S
    + dateheure=20160224:121602
    + '[' 0 -eq 0 ']'
    + case $1 in
    + echo '20160224:121602 : /home/dhs/dhs/kmra/scriptExp/kmra_exp.sh : Info Fin des vérifications, lancement de la prise de vue'
    + refresh=60
    + end=180000
    + camera=reb
    + DHSLog Info 'refresh 60 | end 180000 | camera reb | dir_script /mnt/dhsnas/kmra/script'
    ++ date +%Y%m%d:%H%M%S
    + dateheure=20160224:121602
    + '[' 0 -eq 0 ']'
    + case $1 in
    + echo '20160224:121602 : /home/dhs/dhs/kmra/scriptExp/kmra_exp.sh : Info refresh 60 | end 180000 | camera reb | dir_script /mnt/dhsnas/kmra/script'
    /home/dhs/dhs/kmra/scriptExp/kmra_exp.sh: ligne 54: ${$KMRA_DIR_SCRIPT/kmra.sh} : mauvaise substitution
    + DHSLog EndTask /home/dhs/dhs/kmra/scriptExp/kmra_exp.sh
    ++ date +%Y%m%d:%H%M%S
    + dateheure=20160224:121602
    + '[' 0 -eq 0 ']'
    + case $1 in
    + echo '20160224:121602 : /home/dhs/dhs/kmra/scriptExp/kmra_exp.sh : ----- End of Task /home/dhs/dhs/kmra/scriptExp/kmra_exp.sh -----'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /home/dhs/dhs/kmra/scriptExp/kmra_exp.sh: ligne 54: ${$KMRA_DIR_SCRIPT/kmra.sh} : mauvaise substitution
    J'ai relancé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ${KMRA_DIR_SCRIPT}/kmra.sh
    et mainteannt le problème vient du script kmra.sh

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    + . envi.sh
    /mnt/dhsnas/kmra/script/kmra.sh: 13: .: envi.sh: not found

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/09/2009, 15h36
  2. crontab ne lance pas mon script
    Par cyberio dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 21/07/2009, 16h42
  3. Mon application s'arrête brutalement sans lever d'Exception
    Par verbose dans le forum Général Java
    Réponses: 13
    Dernier message: 27/06/2009, 14h04
  4. Arrêt brutal Pc Portable
    Par hegros dans le forum Ordinateurs
    Réponses: 24
    Dernier message: 13/02/2007, 22h39
  5. Fermeture de connexion en cas d'arrêt brutal
    Par Bartuk dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 30/05/2006, 16h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo