2014-11-18 2 views
0

Я использую простой цикл для перезапуска процесса, если он умирает. Иногда я видел остановку цикла, чего, конечно, не следует делать. Что может быть причиной этого? Я использую низкоуровневый узел/vps, работающий с ubuntu 14. Спасибо. :)Зачем цитировать?

Это цикл, который я использую.

#!/bin/bash/ 
period=${1:-60} 
while : 
do 
sleep 20 & 
sh restart.sh 
wait 
done 

Это restart.sh .. это отбирает ток PID из «FFmpeg», и если его не нашли, он повторно запускает команду FFmpeg, который распространял свою собственную интернет радиостанцию, которую я могу потом слушать в любом месте :)

#!/bin/bash/ 
pgrep ffmpeg 
if [ $? -ne 0 ] 
then killall ffmpeg 
killall rtmpdump 
sleep 1 
nohup ffmpeg (a bunch of ffmpeg stuff) & 
fi 

Так что говорят это может быть проблема с FFmpeg висящей/замораживанием, а затем цикл умирающим из? Есть ли способы улучшить то, что я здесь делаю? TBH Я всего лишь месяц в Linux и неделю в bash, так что это лучшее, что я мог бы сделать.

Спасибо за помощь, это было очень полезно!

ответ

0

В зависимости от того, что делает restart.sh, похоже, что скрипт мог wait навсегда, если sh restart.sh висит. Указав wait без PID, он будет до тех пор, пока все идентификаторы процесса, известные вызывающей оболочке, не будут завершены (см. man 1P wait). Если sh restart.sh висит, wait никогда не будет удовлетворен.

Если нет конкретных требований к фоновому сну, то почему бы не запустить сон на переднем плане и опустить wait вообще:

#!/bin/bash/ 
period=${1:-60} 
while : 
do 
    sleep 20 
    sh restart.sh 
done 
+0

Ваши делают объяснения много смысла !! Я ценю это. Я добавил дополнительную информацию на главный пост, если это поможет. Независимо от того, пересматриваете ли вы этот пост, я буду отмечать как правильный anwser позже. Благодаря!! :) – User8341288564

Смежные вопросы