Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 31/08/2010, à 16: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, à 16: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, à 17: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, à 18: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, à 20: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, à 21: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, à 21: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, à 21: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, à 21: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, à 11: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, à 12: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, à 13:02

FRUiT

Re : Script bash fonctionnel, pas avec crontab

Oki marci smile


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, à 13: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, à 13: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, à 14: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