Pocket

数年前に流行ったテレビチューナー「PT2」。実は私も個人的に購入して、2枚差しの録画サーバーを作成している。私が構築した当時、後継機の「PT3」も出ていたのだがあまりいい噂を聞かなったので見送った。確か、ドライバが安定していないとかそんな内容だった気がする。

OSは、WindowsかLinuxか迷った末「CentOS」を選択した。Linux用の録画ツール「EPGREC」がPHPベースのツールで、WEBアプリとして作動するというのが決め手だった。
ただ、このEPGREC、私のサーバでは最近調子がおかしい。。。
たとえば、テレ東の番組を指定しているのに同時刻の別チャンネルを録画していたり。地上波の番組表がBSのところに表示されてしまったりという事象が発生しているのだ。
Sponsored Links

大体再起動すれば治るのだが、再起動後1~2週間でまたおかしくなる。
ちゃんと原因を調べる時間もないし、どうしようかな…
そうだ、定期的に再起動させよう(いたって普通の発想)
と、いうことで、録画していないタイミングにサーバを再起動させるようなスクリプトを作ってみた。
実際には、引数1で指定したプロセスが「ps aux」を実行したときにいなかった場合、引数2のコマンドが実行される。指定したプロセスが実行中の場合、実行が完了するまで監視し続けるという内容だ。以下がソース。
conditional_script.sh
#!/bin/sh
#----------------------------------------------------------------------------------------
#作成者:Blacknon
#作成日:2013/07/12
#概要 :
#
#スクリプト実行後、引数1で指定されたプロセスが現在実行中かチェックを行います。
#プロセス実行中か否かは変数「checktime」に指定されている秒数の間隔で再チェックを行い
#引数1のプロセスが実行中止になるまで再チェックは行われます。
#引数1で指定されたプロセスが存在していないことを確認したら引数2に指定されたコマンドが
#実行されます。
#
#例)
#   本スクリプト "プロセス名 -オプション" "実行させたいコマンド -オプション"
#
#引数1 = "プロセス名 -オプション"
#引数2 = "実行させたいコマンド -オプション"
#
#----------------------------------------------------------------------------------------

#引数1のチェック間隔を指定します。(単位:秒)
checktime=1

#引数が2個指定されているか確認を行う。
CMDNAME=`basename $0`
if [ $# -ne 2 ]; then
  echo "Error:引数は2個設定してください。"  1>&2
  echo "EX) $CMDNAME \"/var/www/epgrec/getepg.php --b25\" \"shutdown -r now\""  1>&2
  exit 1
fi

#引数1 "現在実行中でCount対象のジョブ"
while true
do
  rJob=`ps aux | grep -- "$1" | grep -v $CMDNAME | wc -l`
  rJob=$((rJob - 1))

  if [ $rJob -eq 0 ]; then
    $2
    break
  fi
  sleep $checktime
done

大体、こんな感じ。
私個人の使い方としては、cronで毎週特定の曜日に「sh conditional_script.sh  “/usr/local/bin/recpt1 –b25” “reboot”」と指定することで、録画プロセスが実行されていないタイミングで再起動がかかるようにしている。

まあ、おもいっきり付け焼刃なんですけどね!

原因、調べないとなぁ…

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。