Bash: script qui tourne en continu

Fermé
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 - 15 avril 2012 à 14:10
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 - 15 avril 2012 à 15:15
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 ^^


6 réponses

dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
15 avril 2012 à 14:25
hello
exécuter motion en arière plan et le script continue
motion &
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
15 avril 2012 à 14:29
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 "&" :

motion &


Sinon, en voyant ton script, peut-être serions-nous plus inspirés... ;-\
0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
15 avril 2012 à 14:41
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)

#!/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 ;)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
15 avril 2012 à 14:46
Pourquoi n'utilises-tu pas "cron" pour lancer tes scripts ?

Ou à la limite, utilises la commande "at" dans ton script, non ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
15 avril 2012 à 14:51
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
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
15 avril 2012 à 14:57
Ben je ne vois pas où est le problème ???

Une tâche cron (ou via init.d) qui lance le daemon motion à l'initialisation du système
Une tâche cron qui lance ta fonction1 à 12h
Une tâche cron qui lance ta fonction2 à 18h
Une tâche cron qui arrête ta machine à 24h.
0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
15 avril 2012 à 15:05
oui je suis d'accord mais le but estd e tout regrouper dans un script qui reproduirait, effectivement, le role de cron
0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
15 avril 2012 à 15:15
En tout cas merci de m'avoir aidé ;) aussi rapidement. bon dimanche à tous (:
0