Como reiniciar automaticamente um comando depois de ser fechado?

0

Estou usando o rtmpdump para reativar o vídeo ao vivo na minha rede local no servidor nginx rtmp. assim:

sudo rtmpdump -r "rtmp://123.45.6.7/live/" -a "live/" -f "LNX 14,0,0,125" -W "http://123.45.6.7/jwplayer.flash.swf[1] " -p "http://123.45.6.7/[2] " --live -y "livestream2" | avconv -i pipe:0 -y
-v:v info -vcodec copy -acodec copy -f flv rtmp://localhost:1935/live/

funciona muito bem sem nenhum problema, mas de vez em quando a fonte original pode piscar e isso fará com que o comando seja encerrado, e eu tenho que executar manualmente o comando novamente. Existe uma maneira de criar um script que detectará automaticamente se o rtmpdump foi encerrado e não há nenhum comando zumbi em execução e execute novamente o comando? Eu quero automatizar esse processo por cerca de quatro transmissões ao vivo. É possível?

    
por bran 19.07.2014 / 17:33

2 respostas

1

Você pode escrever um script com este conteúdo:

#! /bin/bash
function INT_cleanup()
{
    kill 'jobs -p'
    exit
}

trap INT_cleanup INT

# ${VAR-TEXT} means that TEXT is used if VAR is empty.

STREAM_START=$(($1))
STREAM_END=$(($2))
for ((COUNT=STREAM_START; COUNT<=STREAM_END;COUNT++))
do
    while true #Infinite loop
    do
        rtmpdump -r "rtmp://123.45.6.7/live/" -a "live/" -f "LNX 14,0,0,125" -W \
            "http://123.45.6.7/jwplayer.flash.swf[1] " \
            -p "http://123.45.6.7/[2] " --live -y "livestream$COUNT" | 
        avconv -i pipe:0 -y -v:v info -vcodec copy \
            -acodec copy -f flv rtmp://localhost:1935/live$COUNT/
    done &
done

Ou

#! /bin/bash
function INT_cleanup()
{
    kill 'jobs -p'
    exit
}

trap INT_cleanup INT

count=0
while [[ $count < 10 ]] # Try 10 times
do
    rtmpdump -r "rtmp://123.45.6.7/live/" -a "live/" -f "LNX 14,0,0,125" -W "http://123.45.6.7/jwplayer.flash.swf[1] " -p "http://123.45.6.7/[2] " --live -y "livestream2" | avconv -i pipe:0 -y -v:v info -vcodec copy -acodec copy -f flv rtmp://localhost:1935/live/
    count=$((count + 1))
done

em um arquivo, chame-o de stream.sh , torne-o executável:

chmod +x stream.sh

e execute-o:

sudo ./stream.sh 1 3

Para matar o script, pressione Ctrl C . O primeiro é um loop infinito, o segundo é executado por 10 iterações.

    
por muru 19.07.2014 / 17:58
1

Eu encontrei este script. Eu usei para reaparecer a doca AWN. Funciona ok mas aconselho que teste antes de usar muito

 #!/bin/bash

 # This script is a simple respawn deamon for those of us who dont want
 # to deal with the /etc/event.d, monit etc...
 # Usage: sh respawn.sh [program] [sleep time]

 while [ true ]
 do
       sleep $2
       if ps ax | grep -v grep | $1 > /dev/null
       then
            echo $1": Stopped. Restarting in "$2" seconds."
       else
            $1 &
       fi
  done
    
por kenn 19.07.2014 / 18:03