Как к автоматическому перезапуску команда после того, как это закрывается?

Я использую rtmpdump для перепотоковой передачи живого видео в моей локальной сети на nginx rtmp сервер. как это:

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/

это работает отлично самостоятельно без проблемы, но время от времени первоисточник мог бы мерцать, и это заставит рабочую команду выходить, и я должен вручную выполнить команду снова. Существует ли способ сделать сценарий, который автоматически обнаружит, если выход rtmpdump и там не будет никаким выполнением команды зомби и повторно выполнит команду? Я хочу автоматизировать этот процесс приблизительно для 4 прямых трансляций. Действительно ли это возможно?

0
задан 21 December 2014 в 03:42

2 ответа

Вы могли записать сценарий с этим содержанием:

#! /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

Или

#! /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

в файле назовите его stream.sh, сделайте это исполняемым файлом:

chmod +x stream.sh

и выполненный это:

sudo ./stream.sh 1 3

Для уничтожения сценария нажмите CtrlC. Первым является бесконечный цикл, вторые выполнения для 10 повторений.

1
ответ дан 24 December 2019 в 04:14

Я нашел этот сценарий. Я использовал его для перепорождения прикрепления ОСТИ. Это работает хорошо, но я советую Вам тестировать его прежде в большой степени использование

 #!/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
1
ответ дан 24 December 2019 в 04:14

Другие вопросы по тегам:

Похожие вопросы: