Windows + Radika の他、FreeBSD + シェルスクリプト radiko.sh でも予約録音を行っています。FreeBSDを使用するメリットは、
- 常時稼働中のホストのため、録音開始時刻とパソコン起動時刻を気にする必要がない。
- さらにスクリプトを加えることにより、ラジオ放送を自動でPodcastに変換しWebサーバーに登録することが出来る。
ということがあり、重宝していました。
ところが、2015/3/11 から、突然 radiko の録音がいつまで経っても停止されていないことに気づきました。きっかけは、3日経過した後、CPU負荷が異常に上昇していることに気づき、調べてゆき原因が radiko.sh というラジコを自動録音するスクリプトだと判明。
調べていった結果、どうも録音が開始されたらエンドレスで録音されているようで、指定した録音終了時刻になっても録音が停止されません。
頭に浮かんだのは、「またラジコの仕様変更か〜」ってことですが、radika の方は正常に録音されています。
radiko.sh に -x オプションを付けて実行してみたところ、エラーが出ていました。今回はサーバー側の問題では無さそうです。
> radiko.sh TBS 20:05 authtoken: G0Kz-48JFDC2k-2SBzQZ6A \noffset: 49668 length: 16 \npartialkey: CAhxkkqfTgD1z07nNDx8ZQ== authentication success areaid: JP13 ruby: not found expr: syntax error [: -lt: unexpected operator RTMPDump v2.4 (c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL Connecting ... WARNING: Trying different position for server digest! INFO: Connected... Starting Live Stream INFO: Metadata: 127.493 kB / 20.91 sec^C Caught signal: 2, cleaning up, just a second... 129.315 kB / 21.16 sec Download may be incomplete (downloaded about 0.00%), try resuming ^C
多分、「ruby: not found」が原因でしょうけど、ruby は入っていたはずで 3/10まで動いていた物が突然なぜ?
と、which ruby とタイプしてみると
> which ruby ruby: Command not found.
となり、あれれ!
FreeBSD の ports アップデートでバージョンアップがあったようです。/usr/ports/UPDATINGをチェックしてみると、ruby 2.0 がデフォルトではなくなったため、ruby コマンドとのリンクが切れたと推測しました。
20150301: AFFECTS: users of lang/ruby20 AUTHOR: swills@FreeBSD.org The default ruby version has been updated from 2.0 to 2.1.
ああ、腹立たしい。
さて、対策ですが、
- ruby を 2.1 に上げる
- ruby20 を ruby としてシンボリックリンクを作る
- radiko.sh スクリプトを修正する
くらいが、すぐに思いつくところですが、近日中に行う必要があるとは思うものの、今すぐ ruby 2.1 に上げるのは時間的にちょっと難しい。
シンボリックリンクが一番良さそうなものの、pkgコマンドで ruby を更新するときに消し忘れたりすると邪魔になりそうなので、これも見送り。
radiko.sh 中の “ruby” コマンドの記述を “ruby20” に変更することにしました。
# ruby -> ruby20
backEndUnixTime=$( ruby20 -e "require \"time\";t=Time.parse(\"${backEndTime} JST\"); p t.to_i" )
これで実験したところ、問題は発生しないようなので、しばらくはこれで運用することにします。