Назад | Перейти на главную страницу

Сбой сервера при запуске сценария оболочки

У меня есть виртуальная машина с 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. Перенаправьте все в некоторые файлы журнала: используйте команду> /home/username/xxx.log 2> & 1 & (не используйте tmp, потому что при перезапуске tmp сбрасывается)
  2. Добавьте немного сна 5 между командами, возможно, чтобы процессы запускались медленно, и это даст некоторое время для запуска в заданном порядке (вы также можете использовать команду ожидания, но для проверки сна должно быть достаточно)
  3. Mplayer делает это (берет под свой контроль вашу консоль). Используйте -vo dummy, чтобы увидеть, работает ли. Если по-прежнему не работает, просмотрите журналы, чтобы увидеть, появляются ли какие-либо проблемы с терминалом.