Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

Retourner aux forums || Retourner au forum general.general

general.general : appel aux spécialistes bash ...

Posté par manatlan (Jabber id, page perso, ) le 02 janvier 2006
J'aimerai faire un script bash, pour enregistrer un flux avec vlc pendant un certain laps de temps (ex 2min).

donc qqchose du style :

#!/bin/sh
vlc rtsp://... --sout "#std{access=file,mux=ts,url=$OUTFILE}" -I dummy &

sleep 120
exit 0


explications :
- vlc se lance dans un process (utilisation du &)
- le sleep va faire le process principale, et donc faire patienter vlc
- et l'exit va killer le script et vlc

Le problème : si je coupe/tue VLC .... le sleep va perdurer ...
j'aimerai bien que le "sleep" attende suivant 2 critères :
- le laps de temps défini
- ou la fin process VLC

je pense que c'est possible en bash, mais je ne sais pas trop par où débuter ...

> Lire le message (17 commentaires, moyenne: 1,9).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

Peut-être une clownerie, mais...

Posté par Gyro Gearllose () le 02/01/2006 à 12:55. (lien). Évalué à 1.

Pourquoi ne pas utiliser les opérateurs logiques ?
Genre :
vlc rtsp://... --sout "#std{access=file,mux=ts,url=$OUTFILE}" -I dummy & && sleep 120
En espérant que ça aide...

--
All articles which are excluded shall be deemed included
Tous les articles exclus sont considérés inclus
--Brian de Palma in Phantom of the Paradize
  • [^]Re: Peut-être une clownerie, mais...

    Posté par Gyro Gearllose () le 02/01/2006 à 13:00. (lien). Évalué à 2.

    Ben non, ça aide pas mon truc... Ca ne fonctionne pas du tout, même... J'ai répondu trop vite, j'aurais du tester...
    A la rigueur, il faudrait encadrer l'appel à vlc ... & par des parenthèses, mais ça ne résoud pas le problème pour autant...
    Faudrait peut-être voir du côté des commandes pidof, at, kill.... A moins qu'il n'y ait plus simple...

    --
    All articles which are excluded shall be deemed included
    Tous les articles exclus sont considérés inclus
    --Brian de Palma in Phantom of the Paradize

Essai

Posté par Sisyphe Plâtrier () le 02/01/2006 à 13:20. (lien). Évalué à 1.

Du genre
(vlc || exit -1) & sleep 120; exit 0;
My1.5ct

  • [^]Re: Essai

    Posté par Pascal Terjan (Jabber id, page perso, ) le 02/01/2006 à 13:22. (lien). Évalué à 5.

    j'aurais fait

    #!/bin/sh
    (vlc rtsp://... --sout "#std{access=file,mux=ts,url=$OUTFILE}" -I dummy; kill $$ )&
    sleep 120
    exit 0

    • [^]Re: Essai

      Posté par manatlan (Jabber id, page perso, ) le 02/01/2006 à 14:07. (lien). Évalué à 2.

      ça me paraît pas mal ...
      mais si je veux que du code s'execute après le sleep (par exemple : suppression d'un fichier) .... comment faire ?

      exemple :


      # creation d'un fichier
      echo "record en cours" > rec.txt

      vlc &
      sleep 120

      #suprresion du fichier precedemment cree
      rm rec.txt

      exit 0

      • [^]Re: Essai

        Posté par Pascal Terjan (Jabber id, page perso, ) le 02/01/2006 à 14:21. (lien). Évalué à 2.

        function sortir() { 
           rm -f rec.txt
           exit 0
        }
        
        trap sortir SIGTERM
        
        # creation d'un fichier
        echo "record en cours" > rec.txt
        
        (vlc; kill $$)&
        sleep 120
        sortir
        

        • [^]Re: Essai

          Posté par manatlan (Jabber id, page perso, ) le 02/01/2006 à 14:42. (lien). Évalué à 3.

          ok ... extra ... et une dernière demande ... si je veux stocker le PID du process VLC (pour pouvoir le tuer automatiquement d'ailleurs) en gros alors :

          function sortir() { 
             rm -f rec.txt
             exit 0
          }
          
          trap sortir SIGTERM
          
          # creation d'un fichier
          echo "record en cours" > rec.txt
          
          (
             vlc &
             pidvlc=$!
             echo $pidvlc > vlc.pid
             wait $pidvlc
             kill $$
          )&
          sleep 120
          sortir
          
          c'est crédible ?

          • [^]Re: Essai

            Posté par Pascal Terjan (Jabber id, page perso, ) le 02/01/2006 à 14:59. (lien). Évalué à 3.

            Oui ca parait bien a première vue, mais rien ne vaut un essai :)

            • [^]Re: Essai

              Posté par manatlan (Jabber id, page perso, ) le 02/01/2006 à 15:02. (lien). Évalué à 1.

              et ça ?

              function fin() { 
                 rm -f rec.txt
                 exit 0
              }
              
              # creation d'un fichier
              echo "record en cours" > rec.txt
              
              (
                 vlc &
                 pidvlc=$!
                 echo $pidvlc > vlc.pid
                 wait $pidvlc
                 fin
              )&
              sleep 120
              fin
              
              explications : - suppression du "trap" et du "kill $$" n'est pas mieux qu'avec le trap ?!

              • [^]Re: Essai

                Posté par Pascal Terjan (Jabber id, page perso, ) le 02/01/2006 à 15:28. (lien). Évalué à 2.

                Ben tu attendras toujours 120s même si vlc se finit avant...
                C'est juste le fichier qui sera supprimé de suite, et le script essayera de le re-supprimer après la fin des 120s.

            • [^]Re: Essai

              Posté par manatlan (Jabber id, page perso, ) le 02/01/2006 à 18:52. (lien). Évalué à 2.

              j'ai fait un essai ;-)

              quand je recupere le pid de vlc (du fichier)
              et que je kill vlc (kill xxxx)
              le process vlc s'arrete
              le process du script s'arrete
              mais il reste toujours un process "sleep" ;-( ...

              pourquoi n'est il pas tué avec celui du script ? et y a t il une soluce ?

Voir là...

Posté par David Decotigny (page perso, ) le 03/01/2006 à 09:00. (lien). Évalué à 1.

Une solution a deja ete postee la :
http://linuxfr.org/~11010010/20437.html
Et un frontend python ici :
http://forum.ubuntu-fr.org/viewtopic.php?pid=159297#p159297

--
d2
  • [^]Re: Voir là...

    Posté par manatlan (Jabber id, page perso, ) le 03/01/2006 à 11:57. (lien). Évalué à 2.

    euhhh ... trop fort ...

    C'est MOI qui développe le frontend python sur TON script ;-)

    je cherche juste à améliorer ton script ... car le process "sleep" continue de tourner (ça fait pas beau ;-)
    Ce pourquoi je posais des questions ici pour faire avancer le schmilblick ...

    suis en train de préparer la 0.3 ;-)

    • [^]Re: Voir là...

      Posté par David Decotigny (page perso, ) le 03/01/2006 à 15:51. (lien). Évalué à 1.

      C'etait le mode d'emploi pour passer pour un rigolo ;)

      je me disais aussi que la ligne vlc ressemblait a qqch de connu...

      Une solution qui marche peut etre (pas testee...) :

      vlc .... &
      pidvlc=$!
      sleep .... &
      pidsleep=$!

      _trap_kill ()
      {
      trap "" KILL EXIT QUIT INT TERM
      echo killing $pidvlc
      kill $pidsleep
      kill $pidvlc
      sleep 3
      sync
      exit 0
      }
      trap _trap_kill KILL EXIT QUIT INT TERM

      wait $pidsleep

      --
      d2
      • [^]Re: Voir là...

        Posté par manatlan (Jabber id, page perso, ) le 03/01/2006 à 22:50. (lien). Évalué à 2.

        en fait, je me suis "formé" à bash aujourd'hui ...
        et j'ai refait entièrement le script à partir de zero
        il est maintenant absolument parfait !!!
        - aucun process ne reste en mem (dans tous les cas)
        - un zenity/progress permet d'annuler le recording
        - et j'ai remonté l'appel au "AT" au niveau du python

        tu trouveras tout ici (dans la 04.b):
        http://manatlan.free.fr/setup/freecorder.tar.gz

        voir script "frecord.sh"

        • [^]Re: Voir là...

          Posté par David Decotigny (page perso, ) le 04/01/2006 à 08:33. (lien). Évalué à 1.

          Farpait !

          Juste un detail : le kill -9 est peut-etre un peu violent, je sais pas s'il va bien plaire a vlc. Ca serait peut-etre bien de faire un truc genre kill $pid ; sleep 3 ; kill -9 $pid 2> /dev/null pour lui laisser une chance de terminer proprement.

          --
          d2

Revenir en haut de page || Retourner aux forums || Retourner au forum general.general