[Résolu] Pb avec une commande inconnue quand elle est lancée par cron

Pb avec une commande inconnue quand elle est lancée par cron [Résolu] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 29-07-2014 à 12:02:15    

Salut à tous,
 
j'ai fais un petit script qui prend une photo avec une webcam puis la copie dans un répertoire sur mon compte OneDrive avec la commande onedrive-cli. Ce script fonctionne très bien quand il est lancé manuellement mais quand je le lance avec cron, j'ai une erreur d'exécution, commande introuvable...
 
Le script trpic.sh :


    #!/bin/bash
    #Prendre une photo avec fswebcam :
    echo "Capture photo"
    fswebcam -q -c ~/.fswebcam.conf
    echo "Fin capture"
    #Transfert du dernier fichier cam (cam_yymmdd-HHMMSS.jpg) vers OneDrive
    fic=`find . -name "cam_*.jpg" -cmin -1`
    if [ -n "$fic" ]
    then
      echo "Fichier trouvé : $fic"
      echo "Transfert vers OneDrive"
      onedrive-cli put "$fic" Documents/Raspi/
      echo "Transfert terminé"
    else
      echo "Aucun fichier trouvé. Transfert annulé"
    fi
    exit 0


 
la ligne dans crontab :

*/2 * * * * /home/pi/cam/trpic.sh >> /home/pi/cam/test.log #Test : script lancé toutes les 2 minutes


 
et le message d'erreur :

/home/pi/cam/trpic.sh: ligne18: onedrive-cli : commande introuvable


 
Auriez vous un début d'explication de pourquoi ça fonctionne manuellement et pas avec cron ? Je lance le script manuellement sans être su. Mais le cron ?
 
Merci

Message cité 1 fois
Message édité par otobox le 29-07-2014 à 12:27:12

---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 29-07-2014 à 12:02:15   

Reply

Marsh Posté le 29-07-2014 à 12:09:07    

otobox a écrit :

Salut à tous,
 
j'ai fais un petit script qui prend une photo avec une webcam puis la copie dans un répertoire sur mon compte OneDrive avec la commande onedrive-cli. Ce script fonctionne très bien quand il est lancé manuellement mais quand je le lance avec cron, j'ai une erreur d'exécution, commande introuvable...
 
Le script trpic.sh :


    #!/bin/bash
    #Prendre une photo avec fswebcam :
    echo "Capture photo"
    fswebcam -q -c ~/.fswebcam.conf
    echo "Fin capture"
    #Transfert du dernier fichier cam (cam_yymmdd-HHMMSS.jpg) vers OneDrive
    fic=`find . -name "cam_*.jpg" -cmin -1`
    if [ -n "$fic" ]
    then
      echo "Fichier trouvé : $fic"
      echo "Transfert vers OneDrive"
      onedrive-cli put "$fic" Documents/Raspi/
      echo "Transfert terminé"
    else
      echo "Aucun fichier trouvé. Transfert annulé"
    fi
    exit 0


 
la ligne dans crontab :

*/2 * * * * /home/pi/cam/trpic.sh >> /home/pi/cam/test.log #Test : script lancé toutes les 2 minutes


 
et le message d'erreur :

/home/pi/cam/trpic.sh: ligne18: onedrive-cli : commande introuvable


 
Auriez vous un début d'explication de pourquoi ça fonctionne manuellement et pas avec cron ? Je lance le script manuellement sans être su. Mais le cron ?
 
Merci


Si la commande n’est pas trouvée, donne le PATH complet, soit :

Code :
  1. $(which fswebcam)


soit

Code :
  1. /usr/bin/fswebcam


Je suppose que ça règlera ton problème.


---------------
Décentralisons Internet-Bépo-Troll Bingo - "Pour adoucir le mélange, pressez trois quartiers d’orange !"
Reply

Marsh Posté le 29-07-2014 à 12:26:34    

ce n'est pas fswebcam qui déconne, ça fonctionne bien, c'est onedrive. J'ai donc fais un which onedrive-cli, cela m'a indiqué le chemin /usr/local/bin/onedrive-cli.
 
J'ai modifié mon script et rajouté le chemin complet et bingo :) ça fonctionne !
 
Merci pour cette aide rapide et efficace :jap:


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 29-07-2014 à 18:18:03    

salut,
 
`find' est inutile : renseigne le nom du fichier de sortie dans la commande `fswebcam', et réutilise ce nom.
de plus, si la capture a échouée, je suppose que `fswebcam' retourne un code d'erreur supérieur à zéro

Code :
  1. #!/bin/bash
  2. PATH=$PATH:/usr/bin
  3. nomFichier=fichier_$(date +%s)
  4. if fswebcam -q -c ~/.fswebcam.conf "$nomFichier"
  5. then
  6.    onedrive-cli put "$fic" Documents/Raspi/
  7. else
  8.    echo "Aucun fichier trouvé. Transfert annulé"
  9.    exit 1
  10. fi

Reply

Marsh Posté le 29-07-2014 à 19:02:44    


Salut,
 
oui, je sais, mon script est loin d'être parfait. Je débute !
 
Ce que tu dis m'intéresse car récupérer le nom du fichier de sortie est quelque chose que j'ai essayé de faire en vain, tout comme essayer d'intercepter un message d'erreur qui se produit une fois sur 20 en moyenne (Corrupt jpg data).
 
Comment tu fais pour renseigner le nom du fichier de sortie de fswebcam ? En faisant un echo > ?
C'est le fichier .fswebcam.conf qui donne le nom du fichier de sortie. Est-il possible de mettre des variables dans un tel fichier ?


pi@raspberrypi ~ $ cat .fswebcam.conf
resolution 640x480
jpeg 95
delay 1
font sans:10
title "Yo!"
timestamp "%d-%m-%Y %H:%M:%S"
save ./cam_%y%m%d-%H%M%S.jpg


En fait, ce que je crains, c'est que si pour une raison ou une autre, le temps de faire un save ./cam_%y%m%d-%H%M%S.jpg et un echo > ./cam_%y%m%d-%H%M%S.jpg
il se passe une seconde et que le nom du fichier enregistré et le nom renvoyé soit différent...
Je n'ai pas testé en mettant une variable dans ce fichier conf, mais dans la mesure où ce n'est pas un fichier exécutable, ça m'étonnerait que ça fonctionne...
 
 
 
 
En ce qui concerne le message signalant un fichier jpg corrompu, j'ai essayé d'intercepter ce message afin de refaire une capture, mais j'y ai passé une bonne partie de mon après-midi hier sans succès
 
Que je fasse :
fswebcam -q -c ~/.fswebcam.conf > Erreur.log
ou
fswebcam  -c ~/.fswebcam.conf > Erreur.log #-q enlevé = pas de mode quiet
le log renvoie les opérations faits par la webcam mais pas le message d'erreur qui s'affiche à l'écran mais pas dans le log.
 
Mais c'est une autre histoire.


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 29-07-2014 à 19:59:02    

pourquoi utiliser un fichier de conf externe ?
tout cela peut se configurer avec des options, il me semble.
tu en fais une fonction :

Code :
  1. capture() {
  2.    fswebcam nomFichier_$(date +%format) \
  3.                    -q \
  4.                    -<taille> 640X480 \
  5.                    -autresOptions
  6. }
  7. if capture
  8. ...


Message édité par Profil supprimé le 30-07-2014 à 02:56:59
Reply

Marsh Posté le 29-07-2014 à 23:27:10    

Ah ben oui sans doute, mais tu parles à un débutant là ! J'ai bidouillé une solution pour que ça marche, mais je sais qu'elle n'est pas élégante !
 
Je vais essayer de faire quelque chose qui marche et je poste ma solution à partir de ce que tu as commencé ;)
 
Merci pour ton aide et les pistes :jap: . C'est comme ça qu'on apprend :)


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed