地デジ録画サーバ(epgrec)自動起動・終了設定できたお

マジでlinuxとかよくわからんのですが、ついその気になっちゃって組み立ててしまった地デジ録画サーバ(epgrec on Ubuntu 10.04 on atom d510mo)。これ24時間つけとけばsambaとかbindとか使えて便利やん、と思って今までつけっぱなしにしていましたが、節電の時代ですから、録画時間になると自動で電源がついたり、終わると消したりしたくなりました。
ubuntuとepgrecの鉄板さから、ググったらそのものズバリがすぐ出てくると思ったのですが、思いの外見つからなかったので、雰囲気英語と共に載せておきます。
地デジを録画して、録画したtsはwindowsからsambaで開いて視聴するような人向け。

#!/bin/bash

# sort works well when LANG=C
LANG=C

# if nobody logged in.
if [ `who|wc -l` -eq 0 ] ; then
# if nobody are using samba.
if [ `smbstatus -L|wc -l`  -eq 2 ]; then
# if no at jobs are runnning.
if [ `atq|grep =|wc -l` -eq 0 ]; then

# get nearest time which at scheduled.
nearest=`atq|awk '{print $6,$3,$4,$5}'|\
sort -n -k 4|sort -k 1 -Mk 2 -k 3|\
sort -n -k 3|head -1|awk '{print $2,$3,$4,$1}'`
# transform timestamp to seconds.
wkuptime=`date -d "$nearest" +%s`
# set secs to 3 minutes before.
wkuptime=`expr $wkuptime - 180`
# get present time.
now=`date +%s`
# if next recording will start after greater than 30 minutes later.
if [ `expr $wkuptime - $now` -gt 1800 ]; then
# initialize wakealarm.
echo 0 > /sys/class/rtc/rtc0/wakealarm
# set wakealarm.
echo $wkuptime > /sys/class/rtc/rtc0/wakealarm
# shutdown
/sbin/shutdown -h now
fi
fi
fi
fi

ていうか電源切っちゃったらwolbiosの「何時に起動」ってオプションを使わないことには、自動的に起動できないんだと思ってました。ACPIさんマジパネェす。このスクリプトをsudo crontab -eで*/30 * * * * /home/foo/bar.shすれば、以下のように動きます。

  1. 誰かログインしてる人いんの?
  2. あ、いない? じゃあsamba使ってる人は?
  3. マジかよ、いないの? えっ、じゃあ俺今録画してるんだっけ……?
  4. あ、してないわ。えーっと次の録画はこの時間だから……
  5. 今から30分以内には録画しなくていいな。じゃあ暇だから俺寝てるわ

時間がUTCとかJSTとかあるそうですが、特に気にしないでうまく動きました。僕のところはマザボUTCでOSはJSTでやってるみたいです。atqがJSTで出力して、それをJSTで受け取ったdateがunix timeに変換して、wakealarmにはunix timeを投げる、という風になってます。


参考文献


#追記
そういえばこれだといつ番組表更新するんだろう……。


#追記
やられた……。3日と10日、どっちのほうが小さい値かな? 3と10なら、3のほうが小さいだろう、と思いがちですが、sortコマンドでは-nオプションでそのフィールドが数値であることを指定しないと、3と"1"0を比較して、10のほうが小さくソートされてしまうんですね。たまにそういう仕様のソフトとかあるよね。いちいちファイル名を01,02,...って書き換えないとだめなやつ。
そういうわけで書き換えました。
sort -k 1 -k 2 -n -k 3
まず1番目のフィールドでソート、値が同じであれば2番目、それでも同じなら3番目のフィールドを数値として見てソート。年、月、日付の順でソートできます。こうしてまた録画失敗してしまったのでした。
ちなみに番組表の更新に関しては、毎時間getepgを実行することでなんか上手くいってます。録画するだけではなく、視聴する時間もあるわけなので、その間に更新してくれてるんでしょう。まあここも何とかしたほうがいいですよね。


#追記 12/07/15
やっぱりソートがうまくいかないタイミングがあるので、気合でソートしまくる方針にしました。