2012-01-24 5 views
1

J'ai un script bash que je lance via cron pour redémarrer vlc (j'utilise vlc pour afficher le flux depuis une webcam IP que j'utilise comme un babyphone - le stream est progressivement retardé, donc je lance ce script pour tuer toutes les instances de vlc et le redémarrer). Ce script s'est bien passé sous Ubuntu 11.04 pendant un an. J'ai mis à jour vers Ubuntu 11.10 (oh, idiot moi) et maintenant cela ne fonctionne correctement que si je l'exécute avec l'option de débogage bash activée (bash -x script.sh). Si je l'exécute sans l'option -x, le script tue toutes les instances de vlc, mais quitte puis redémarre vlc.j'ai aucune idée pourquoi. Notez que peu importe si je l'exécute via ou cron ou direct sur la ligne de commande, sans l'option -x, il tue vlc mais ne lance jamais vlc.Le script Bash s'exécute lorsque débogué (-x) mais échoue lorsqu'il est exécuté normalement

Ici, il est:

#!/bin/bash 
DISPLAY=:0 
export DISPLAY 

VPID=($(ps -e | grep vlc | awk '{print $1;}')) 
if [ -n "$VPID" ];then 
     while [ -n "$VPID" ];do 
      kill $VPID 
      VPID=($(ps -e | grep vlc | awk '{print $1;}')) 

     done 
     vlc --volume=900 http://lily:@192.168.1.43/videostream.asf & 
     sleep 10 
     WID=($(xwininfo -display :0 -name "http://192.168.1.43/videostream.asf - VLC media player" -int | awk '/Window id:/ {print $4}')) 
     sleep 10 
     xdotool windowmove --sync $WID 0 0 
     xdotool windowsize --sync $WID 1600 1000 
     exit 
fi 
exit 
+1

'pkill vlc' est beaucoup plus simple que votre méthode actuelle de tuer tous les processus vlc. –

+0

Merci, je vais essayer - j'ai toujours tendance à utiliser un marteau pour casser un écrou;) – prupert

Répondre

1
  1. Pourquoi vous faire VPID et WID tableaux?
  2. Avez-vous essayé de mettre echo "after while loop" directement après le done dans la boucle while pour voir si votre script ne tombe jamais dans la boucle quand pas en mode débogage?
  3. Il n'y a pas besoin d'explicite exit la façon dont votre script est écrit

les opérations suivantes:

#!/bin/bash 
export DISPLAY=":0" 

VPID=$(pgrep vlc) 
if [[ -n "$VPID" ]]; then 
    while [[ -n "$VPID" ]]; do 
    kill $VPID 
    VPID=$(pgrep vlc) 
    done 

    vlc --volume=900 http://lily:@192.168.1.43/videostream.asf & 
    sleep 10 
    WID=$(xwininfo -display :0 -name "http://192.168.1.43/videostream.asf - VLC media player" -int | awk '/Window id:/ {print $4}') 
    sleep 10 
    xdotool windowmove --sync "$WID" 0 0 
    xdotool windowsize --sync "$WID" 1600 1000 
fi 
+0

Désolé pour la réponse différée, je pensais stackoverflow vous envoie des emails avec des réponses. VPID devait obtenir le PID de vlc, mais il semble qu'il y ait de meilleurs moyens d'obtenir ceci, alors merci. WID était juste un moyen plus facile de spécifier le nom de la fenêtre vlc qui est créée. Je vais essayer vos suggestions et voir jusqu'où je vais. Merci. – prupert

Questions connexes