我使用一个简单的循环来重启一个进程,如果它死了。偶尔我会看到循环停止,当然它不应该这样做。这可能是什么原因造成的?我正在使用运行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,所以这是我能做的最好的。
到目前为止,感谢您的帮助,这非常有用!
答案 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