#1 Le 31/08/2010, à 15:48
- jcdenton
Script bash fonctionnel, pas avec crontab
Alors alors bonjour à tous-toutes,
Je me lance dans ce forum avec une question/problème concernant bash & cron : après avoir écris un petit script pour faire du "timelapse" avec une vieille webcam pourri, je me rend compte que je suis incapable de le faire rouler dans crontab. Le script utilise streamer pour prendre les capture et les nomme avec un compteur.
Le plus marrant, c'est il stop à la capture 141 ou à la capture 14 quand je le lance avec crontab, mais il continue indéfiniment quand je le lance dans le terminal. La machine est sous Ubuntu 10.04.
J'aimerais bien réglé ce problème d'abord, mais si vous avez des conseil pour le script en tant que tel, j'aimerais bien m'améliorer également.
Merci!
--crontab--
20 15 * * * ~/scripts/darkly3.sh
--script--
#! /bin/bash
#
# "Darkly" - v0.8 - 2010-08-04
# Script de capture webcam
# jcdenton
#
# Pour une rotation continue, placé dans le crontab. Le script s'arrête automatiquement à 18h.
#
# Scripts de référence par danpaluska (http://gist.github.com/danpaluska)
#
##########
#Variables
DATE=`date +%d-%m-%Y` #date (pour les noms de fichiers)
COMPTEUR=100000 #compteur (pour les noms de photos)
########
# Script
cd /tmp
clear
echo "************"
#Création du repertoire de la journée
echo "Nouvelle journée, nouveau répertoire"
rm -rf darkly*
mkdir darkly${DATE}
cd darkly${DATE}
echo "************"
#capture des images
while [ `date +%H` -lt 18 ]; #Tant que "%H" < 18, fait...
do
streamer -t 3 -o darklyRAW0.jpeg #trois captures : la première est toute déformé pour une raison que j''ignore
rm darklyRAW0.jpeg
rm darklyRAW1.jpeg
convert darklyRAW2.jpeg -resize 400% ${COMPTEUR}.jpg
rm darklyRAW2.jpeg
echo -n "Capture #${COMPTEUR} ("`date +%T`") || "
let COMPTEUR+=1
sleep 10
done
#quand "%H" > 18, on passe à la génération vidéo
echo "Trop tard pour continuer à capturer"
echo "Tentative de génération de la video du ${DATE}"
echo "Les images deviennent un vidéo..."
ffmpeg -r 10 -sameq -i %d.jpg /home/fatherfucker/Darkly/${DATE}.mp4 &>> /dev/null
echo "************"
echo "Vidéo du ${DATE} généré dans répertoire /home/fatherfucker/Darkly/ "
echo "************"
sleep 3
echo "Bonne nuit"
echo
sleep 10
exit 0
Hors ligne
#2 Le 31/08/2010, à 15:50
- sputnick
Re : Script bash fonctionnel, pas avec crontab
test avec ça après le shebang :
. ~/.bashrc
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#3 Le 31/08/2010, à 16:59
- jcdenton
Re : Script bash fonctionnel, pas avec crontab
Le script roule bien en terminal, mais stop toujours avec crontab. Le profile bash semblait pourtant être la cause à mes yeux aussi... bizarre.
C'est bien là qu'il faut mettre le ". ~/.bashrc" ?
#! /bin/bash
. ~/.bashrc
#
# "Darkly" - v0.8 - 2010-08-04
# Script de capture webcam
# jcdenton
#
Hors ligne
#4 Le 31/08/2010, à 17:19
- sputnick
Re : Script bash fonctionnel, pas avec crontab
Oui c'est ça. Le shebang c'est #!/bin/bash.
Rajoute -x à ton shebang, et lance le debug.
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#5 Le 31/08/2010, à 19:48
- jcdenton
Re : Script bash fonctionnel, pas avec crontab
Bon, alors on ne me renvois pas d'erreur avec -x quand j'exécute le script. Mais comment recueillir le même output quand c'est crontab qui le roule ? En ajoutant " >> /tmp/debug.txt" à ma ligne cron, on ne me recrache que le stdout . Merci!
Hors ligne
#6 Le 31/08/2010, à 20:11
- Totor
Re : Script bash fonctionnel, pas avec crontab
rajoute ceci après ton shebang :
exec 4>/tmp/darkly3.trc
BASH_XTRACEFD=4
ensuite, tu auras les traces issues du -x dans le fichier /tmp/darkly3.trc
-- Lucid Lynx --
Hors ligne
#7 Le 31/08/2010, à 20:15
- ehmicky
Re : Script bash fonctionnel, pas avec crontab
Pour avoir stdout + stderr, utilise &>> (tu dois avoir Bash 4). C'est par ailleurs utilisé dans ce script pour rediriger une commande vers Dave Nul.
Dernière modification par ehmicky (Le 31/08/2010, à 20:17)
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#8 Le 31/08/2010, à 20:57
- sputnick
Re : Script bash fonctionnel, pas avec crontab
sinon :
* * * * * /path/to/script.bash &> /path/vers/log
c'est un raccourci pour STDOUT et STDERR compatible avec les version de bash plus anciennes
ou encore pour juste la sortie d'erreur
* * * * * /path/to/script.bash 2> /path/vers/log
ou encore pour STDOUT et STDERR :
* * * * * /path/to/script.bash /path/vers/log 2>&1
pour le truc passe partout. Note le 2>&1 à la fin de la commande et pas ailleurs.
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#9 Le 01/09/2010, à 10:47
- FRUiT
Re : Script bash fonctionnel, pas avec crontab
Juste une tite question pour ma gouverne personnelle je vois un espace dans le shebang, ça gêne pas ?
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#10 Le 01/09/2010, à 11:55
- sputnick
Re : Script bash fonctionnel, pas avec crontab
non, c'est selon ses gouts.
On peut même le changer avec un plus portable ( BSD etc... )
#! /usr/bin/env bash
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#11 Le 01/09/2010, à 12:02
- FRUiT
Re : Script bash fonctionnel, pas avec crontab
Oki marci
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#12 Le 01/09/2010, à 12:26
- ehmicky
Re : Script bash fonctionnel, pas avec crontab
Sur la question de la portabilité de /usr/bin/env, c'est à discuter. J'ai lu plusieurs articles qui opposait le fait que plusieurs distributions mettait env dans /bin et non dans /usr/bin, alors qu'avoir bash dans /bin est plus courant. Il y a aussi des questions de sécurité liées au Suid/Sgid. Voir ce faq.
Ensuite, pour l'espace qui suit le point d'exclamation, il semble que ce soit une légende. Toujours d'après la même source, aucun système supportant Bash et ne supportant pas la syntaxe sans l'espace n'a été trouvé, alors que le contraire est vrai.
Enfin bon, sujet à débat ^^, car d'un autre point de vue, la documentation GNU officielle de Bash souligne dans le même temps le fait que l'espace peut ajouter de la portabilité...
Dernière modification par ehmicky (Le 01/09/2010, à 12:28)
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#13 Le 01/09/2010, à 13:45
- jcdenton
Re : Script bash fonctionnel, pas avec crontab
Avec toutes ces méthodes, j'ai bien recueilli les stdout+stderr dans un fichier (je croyais crontab créait lui même le fichier log, mais j'ai compris que ce n'était pas le cas).
Ce que ça me dis : les fichiers de captures (dans /tmp/darkly${DATE} ) arrêtent d'être écrit mais selon le log, le script continu quand même à capturer. Le fichier log est donc bourré de " "Capture #${COMPTEUR} ("`date +%T`") || " " mais pas plus de 12-14 captures dans le dossier... On se rends donc à cette ligne du script, mais sans passé par les 4-5 lignes précédente.
J'ai l'impression d'être bien proche du problème, mais il m'échappe encore. Vous y voyez quoi vous ?
Hors ligne