Bash: script qui tourne en continu

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 ^^

6 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    exécuter motion en arière plan et le script continue
    motion &
    0
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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
  3. LezardMoo Messages postés 614 Statut Membre 14
     
    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
  4. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Pourquoi n'utilises-tu pas "cron" pour lancer tes scripts ?

    Ou à la limite, utilises la commande "at" dans ton script, non ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. LezardMoo Messages postés 614 Statut Membre 14
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
    2. LezardMoo Messages postés 614 Statut Membre 14
       
      oui je suis d'accord mais le but estd e tout regrouper dans un script qui reproduirait, effectivement, le role de cron
      0
  7. LezardMoo Messages postés 614 Statut Membre 14
     
    En tout cas merci de m'avoir aidé ;) aussi rapidement. bon dimanche à tous (:
    0