Bash: script qui tourne en continu

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

  1. Contributeur
    hello
    exécuter motion en arière plan et le script continue
    motion &
    1. Contributeur
      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... ;-\
      1. 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 ;)
        1. Contributeur
          Pourquoi n'utilises-tu pas "cron" pour lancer tes scripts ?

          Ou à la limite, utilises la commande "at" dans ton script, non ?
          1. 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
            1. Contributeur
              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.
            2. oui je suis d'accord mais le but estd e tout regrouper dans un script qui reproduirait, effectivement, le role de cron
          2. En tout cas merci de m'avoir aidé ;) aussi rapidement. bon dimanche à tous (: