FreeBSD radiko.sh が録音を終了できない!

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.

ああ、腹立たしい。

さて、対策ですが、

  1. ruby を 2.1 に上げる
  2. ruby20 を ruby としてシンボリックリンクを作る
  3. 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" )

これで実験したところ、問題は発生しないようなので、しばらくはこれで運用することにします。

コメントを残す