epgrecで録画失敗する

たまに、EPGを取得するときにrecfsusb2nが動いたままになって録画に失敗しているときがある。
どうやらrecfsusb2nは、放送されてない等、信号のないときに動くと終了しなくなるらしい。
あくまで引数で渡すのは”録画時間”なわけで、信号ないと録画されなくて録画時間もゼロで終了しなくなる。ってことかな。
ってことで、do-record.shを弄ってみた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #!/bin/sh echo "CHANNEL : $CHANNEL" echo "DURATION: $DURATION" echo "OUTPUT : $OUTPUT" echo "TUNER : $TUNER" echo "TYPE : $TYPE" echo "MODE : $MODE" RECORDER=/usr/local/bin/recfsusb2n if [ ${OUTPUT} = "/tmp/__temp.ts" ]; then $RECORDER --b25 $CHANNEL $DURATION ${OUTPUT} >/dev/null & cmd_pid=$! sleep 65 result=`ps -ef | grep $cmd_pid | grep -v grep` if [ "${result}" ] then kill $cmd_pid logger -t getepg recfsusb2n_err fi else $RECORDER --b25 $CHANNEL $DURATION ${OUTPUT} >/dev/null fi |
出力ファイル*1でgetepg.phpから呼び出されたか判別して、EPG取得だったらrecfsusb2nをバックグラウンドで動かして65秒後も動いていたら、プロセスを殺してシステムログに書き込むようにした。
普通の録画はそのまま。
たぶん、これで大丈夫なはず。
ソースを弄って対応してる人がいるみたいですね。
foltia :: labs.m2hq.net
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 --- fsusb2n.cpp.orig 2011-04-06 23:50:48.000000000 +0900 +++ fsusb2n.cpp 2012-01-14 02:41:30.089938063 +0900 @@ -173,8 +173,13 @@ sigaction(SIGINT, &sa, NULL); sigaction(SIGTERM, &sa, NULL); + int timeout = 10; do { sleep(1); + if (--timeout <= 0) { + log << "GetSequenceState timeout." << std::endl; + exit(1); + } } while(pDev->DeMod_GetSequenceState() < 8 && !caughtSignal); // 録画時間の基準開始時間
脚注
- EPG取得の時、epgrecのシステム設定の「EPG取得用テンポラリファイルの設定」にある録画データのパスになる [戻る]

205StudioTR
[...] Dazzling World 2さん参照 Share [...]