Bash: script qui tourne en continu
LezardMoo
Messages postés
614
Statut
Membre
-
LezardMoo Messages postés 614 Statut Membre -
LezardMoo Messages postés 614 Statut Membre -
Bonjour tout le monde :)
alors voila je me lance depuis quelques temps dans le shel script.
je viens de mettre en place un serveur de webcam avec motion, et j'aimerais qu'il "s'autogère" en gros ca donne ca:
1 lance motion
2 a midi prend la première photo de chaque dossie cam, copie les dans un dossier précis, compression tar.gz puis envoi par mail
3 a 18h prend la dernière photo de chaque dossier cam, copie dans un dossier précis, copression tar.gz, envoi par mail
4 a minuit, arrèt de motion puis extinction de la machine.
alors la où je plante c'est au number 1, (pour ceux qui connaissent motion on peut le faire tourné en demon ou non) si j'execute mon script avec motion en demon, alors il me lance bien motion mais s'arrete(le script, motion est toujours bien lancé) si par exemple il n'est pas midi. en gros il ne tourne pas en continu.
si je ne config pas motion en demon alors la, il me lance motion et ne continu pas la suite des instruction, il rest sur motion.
Donc voila, je voulais savoir si je pouvais faire un sorte que mon script tourne en boucle (sans relancer motion a chaque fois) ou si je pouvait lancer un autre shelle avec motion en parallèle et faire tourner mon script d'envoi de photo en boucle.
j'espère que j'ai été assez clair ;)
Merci d'avance au courageux ^^
alors voila je me lance depuis quelques temps dans le shel script.
je viens de mettre en place un serveur de webcam avec motion, et j'aimerais qu'il "s'autogère" en gros ca donne ca:
1 lance motion
2 a midi prend la première photo de chaque dossie cam, copie les dans un dossier précis, compression tar.gz puis envoi par mail
3 a 18h prend la dernière photo de chaque dossier cam, copie dans un dossier précis, copression tar.gz, envoi par mail
4 a minuit, arrèt de motion puis extinction de la machine.
alors la où je plante c'est au number 1, (pour ceux qui connaissent motion on peut le faire tourné en demon ou non) si j'execute mon script avec motion en demon, alors il me lance bien motion mais s'arrete(le script, motion est toujours bien lancé) si par exemple il n'est pas midi. en gros il ne tourne pas en continu.
si je ne config pas motion en demon alors la, il me lance motion et ne continu pas la suite des instruction, il rest sur motion.
Donc voila, je voulais savoir si je pouvais faire un sorte que mon script tourne en boucle (sans relancer motion a chaque fois) ou si je pouvait lancer un autre shelle avec motion en parallèle et faire tourner mon script d'envoi de photo en boucle.
j'espère que j'ai été assez clair ;)
Merci d'avance au courageux ^^
A voir également:
- Bash: script qui tourne en continu
- Bingo bash free - Télécharger - Divers Jeux
- Bash pause ✓ - Forum Shell
- Bash permission non accordée - Forum Shell
- Bash addition - Forum Programmation
- Bash list ✓ - Forum Shell
6 réponses
Salut,
Le plus simple serait de configurer "motion" afin qu'il démarre en même temps que ton PC (Lancement automatique de motion), puisque tu éteins ta machine à la fin du 4, non ?
Pour exécuter une commande en arrière-plan et ainsi pourvoir reprendre la main sur son shell (ou continuer la suite des commandes), il suffit de rajouter "&" :
Sinon, en voyant ton script, peut-être serions-nous plus inspirés... ;-\
Le plus simple serait de configurer "motion" afin qu'il démarre en même temps que ton PC (Lancement automatique de motion), puisque tu éteins ta machine à la fin du 4, non ?
Pour exécuter une commande en arrière-plan et ainsi pourvoir reprendre la main sur son shell (ou continuer la suite des commandes), il suffit de rajouter "&" :
motion &
Sinon, en voyant ton script, peut-être serions-nous plus inspirés... ;-\
si je m'était douté que la réponse était si simple... ^^
alors ok pour motion &
maintenant le truc c'est de faire tourner le reste du script en boucle pour qu'a mini, 18h et minuit il réagisse.
le script: (ya beaucoup d'amélioration a apporter mais je verrais ca plus tard)
Merci ;)
alors ok pour motion &
maintenant le truc c'est de faire tourner le reste du script en boucle pour qu'a mini, 18h et minuit il réagisse.
le script: (ya beaucoup d'amélioration a apporter mais je verrais ca plus tard)
#!/bin/bash
#
# serveur webcam autonome
#
##############################################
# Fonctions selection des fichiers à envoyer #
##############################################
sPictStart() {
sDir1="$1"
sDir2="$2"
#sDir3="$3"
sPictDir1="/tmp/motion/${sDir1}"
sPictDir2="/tmp/motion/${sDir2}"
#sPictDir3="/tmp/motion/${sDir3}"
sCreatDir="/tmp/motion/sendPict/pictures"
sTarName="/tmp/motion/sendPict/pictures-$(date +%Y-%m-%d_%HH%M).tar.gz"
sPictMail="sendEmail -t email -f email -u photos_fin_journée -a ${sCreatDir}/* -s mail.gandi.net -xu user -xp pass"
mkdir ${sCreatDir}
(
cd ${sPictDir1}
if [ $(ls -a | wc -l) -eq 2 ] ; then
return
else
sFile='ls | head -1'
cp $sFile ${sCreatDir}
fi
)
(
cd ${sPictDir2}
if [ $(ls -a | wc -l) -eq 2 ] ; then
return
else
sFile='ls | head -1'
cp ${sFile} ${sCreatDir}
fi
)
##### pour une 3ème cam
#(
# cd ${sPictDir3}
# if [ $(ls -a | wc -l) -eq 2 ] ; then
# return
# else
# sFile='ls | head -1'
# cp ${sFile} ${sCreatDir}
# fi
#)
#####
(
cd /tmp/motion/sendPict
tar -zcvf ${sTarName} *
${sPictMail}
#rm -f *
)
}
sPict18() {
sDir1="$1"
sDir2="$2"
#sDir3="$3"
sPictDir1="/tmp/motion/${sDir1}"
sPictDir2="/tmp/motion/${sDir2}"
#sPictDir3="/tmp/motion/${sDir3}"
sCreatDir="/tmp/motion/sendPict/pictures"
sTarName="/tmp/motion/sendPict/pictures-$(date +%Y-%m-%d_%HH%M).tar.gz"
sPictMail="sendEmail -t email -f email -u photos_fin_journée -a ${sCreatDir}/* -s mail.gandi.net -xu user -xp pass"
mkdir ${sCreatDir}
(
cd ${sPictDir1}
if [ $(ls -a | wc -l) -eq 2 ] ; then
return
else
sFile='ls | tail -1'
cp ${sFile} ${sCreatDir}
fi
)
(
cd ${sPictDir2}
if [ $(ls -a | wc -l) -eq 2 ] ; then
return
else
sFile='ls | tail -1'
cp ${sFile} ${sCreatDir}
fi
)
##### pour une 3ème cam
#(
# cd ${sPictDir3}
# if [ $(ls -a | wc -l) -eq 2 ] ; then
# return
# else
# sFile='ls | tail -1'
# cp ${sFile} ${sCreatDir}
# fi
#)
#####
(
cd ${sCreatDir}
tar -zcvf ${sTarName} pictures
${sPictMail}
rm -f *
)
}
####################
# Lancement motion #
####################
(
LD_PRELOAD=/usr/lib/libv4l/v4l2convert.so motion -c motion.conf
)
###################################
# Copie et envoi des photos à 12h #
###################################
if [ $(date +%H%M) -eq "1200" ] ; then
sPictStart "cam1" "cam2" #"cam3"
fi
####################################
# Copier et envoi des photos à 18h #
####################################
if [ $(date +%H%M) -ge "1800" ] ; then
sPict18 "cam1" "cam2" "cam3"
fi
######################################
# Extinction de motion et du serveur #
######################################
if [ $(date +%H%M) -eq "0000" ] ; then
killall motion
shutdown -h now
fi
####### FIN DU SCRIPT #######
Merci ;)
Pourquoi n'utilises-tu pas "cron" pour lancer tes scripts ?
Ou à la limite, utilises la commande "at" dans ton script, non ?
Ou à la limite, utilises la commande "at" dans ton script, non ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
parce cron c'est bien mais je voulais m'essayer à un demon en quelque sorte, créer un script qui rendrais "autonome" la machine avec un seul processus en gros