为什么循环会死?

时间:2014-11-18 03:46:00

标签: linux bash ubuntu-14.04

我使用一个简单的循环来重启一个进程,如果它死了。偶尔我会看到循环停止,当然它不应该这样做。这可能是什么原因造成的?我正在使用运行ubuntu 14的低端节点/ vps。谢谢。 :)

这是我使用的循环。

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

这是restart.sh ..它会影响' ffmpeg'的当前PID。如果找不到它,它会重新运行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,所以这是我能做的最好的。

到目前为止,感谢您的帮助,这非常有用!

1 个答案:

答案 0 :(得分:0)

根据restart.sh的作用,如果wait挂起,则脚本可能永远sh restart.sh。通过指定wait没有PID,它将等待调用shell已知的所有进程ID终止(请参阅man 1P wait)。如果sh restart.sh挂起,则永远不会满足wait

如果对背景睡眠没有特定要求,为什么不在前台运行睡眠并完全省略wait

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