运行 shell 脚本时服务器崩溃

运行 shell 脚本时服务器崩溃

我有一台运行 CentOS 5.5 的虚拟机,我将其用作流媒体服务器。

如果我打开 4 个终端并执行以下操作:

1号航站楼:

 # mkfifo pipe1.avi
 # mkfifo pipe2.avi
 # ffserver &
 # ffmpeg -probesize 164000 -i pipe1.avi -async 1 -r 25 http://localhost:8090/feed1.ffm

2 号航站楼:

 # ffmpeg -i pipe2.avi -async 1 -r 25 -vcodec flv -f flv somename.flv

3号航站楼:

 # mplayer -dumpstream rtp://someIp:somePort -dumpfile pipe1.avi

4号航站楼:

 # mplayer -dumpstream rtp://someIp:somePort -dumpfile pipe2.avi

一切都很顺利。没有任何问题。

现在我尝试编写一个脚本并从 cron 运行它。这是脚本:

ffserver &
ffmpeg -probesize 164000 -i pipe1.avi -async 1 -r 25 http://localhost:8090/feed1.ffm &
ffmpeg -i pipe2.avi -async 1 -r 25 -vcodec flv -f flv somename.flv &
mplayer -dumpstream rtp://someIp:somePort -dumpfile pipe1.avi &
mplayer -dumpstream rtp://someIp:somePort -dumpfile pipe2.avi &
exit 0

crontab 行是:

10 * * * * script.sh > /dev/null 1>&2

问题是,当 cron 运行时,系统会崩溃。实际上,它并没有真正使流崩溃,我从另一台计算机上看到它,并且它运行正常。但是,我无法在机器上做任何事情。屏幕变黑,除了重新启动它,我什么也做不了。我有一个脚本可以终止前面的进程。如果我使用它,流会停止,但我仍然无法重新获得对系统的访问权限(无论我做什么,屏幕都是相同的黑屏)。

答案1

  1. 将所有内容重定向到一些日志文件:使用命令> /home/username/xxx.log 2>&1 &(不要使用 tmp,因为重新启动时 tmp 会被刷新)
  2. 在命令之间添加一些 sleep 5,可以使进程启动缓慢,并且它会给一些时间按给定的顺序启动(您也可以使用 wait 命令,但对于测试,sleep 应该足够了)
  3. Mplayer 正在执行此操作(正在控制您的控制台)。使用 -vo dummy 查看它是否正常工作。如果仍然不起作用,请查看日志以查看是否出现任何“终端”问题。

相关内容