ラジコの自動リアルタイム録音に、radish と Windows Subsystem for Linux(WSL) の cron を利用しています。
自動録音はとっても便利なのですが、ラジコリアルタイム録音プログラム radi.sh の開始には WSL の cron を利用しているため、cron が止まると録音が出来ません。リアルタイム録音に失敗しても、タイムフリー録音出来るので殆どの場合困ることはないのですが、リアルタイム録音しておけると安心できます。
目下の問題は、radi.shを起動するための cron サービスが、Windows10 再起動後に自動起動してくれないということ。
そもそも、WSLは実OSのLinuxなら自動起動してくれる crond がWSLでは自動起動しません。これは、ホストがWindowsであるため、自動実行にはWindowsタスクスケジューラを使えということだと思うのですが、不便。
なので、私は、Windows再起動後、Debian コンソールから、「sudo service cron start」を実行して crond を起動しています。
通常はこれでいいのですが、予定外のWindows再起動が起こるとcrond 起動が出来なかったり、別の処理をしていて忘れてしまったり。そして、気付くと番組が録音されていない。。。。。。。という悲劇が発生。タイムフリーに対応している番組は良いのですが、タイムフリーがないNHKだと、チ〜ン。
こうなるケースとして一番多いのが、Windows UpdateでOSが自動再起動されてしまうケース。
次に、新しいデバイスを接続した時にドライバーが入ったり、新しいアプリを入れたり、抜いたりして、OSを再起動しなくちゃいけなくなるケース。こういう時は急いでいるので、crond の起動を、ついつい忘れてしまいがち。
夜中にOSが勝手に再起動して、ログイン手前で放置されてしまう場合は駄目なのですけど、ログイン時にcronサービスが自動で起動されるようにしてみました。
まず、cron サービスを自動起動するWindowsバッチファイルを作りました。
<cron.bat> wsl /bin/bash -l -c "sudo service cron start"
これをDOSから発行すればいいじゃん!って思ったのですが、sudo コマンドは管理者パスワードを手入力する必要があるので、これだとバッチファイルがうまく起動してくれません。(対話型で起動するなら問題なし。)
こちらのページに、同様な課題に直面し解決した方の情報がありましたので、真似させてもらいました。
https://qiita.com/nashi2603/items/d0645305b137017b91b0
wsl -u root -- service cron start
この一行をバッチファイルにして、タスクスケジューラの、ログオン時に自動起動するように登録。
ただし、ログイン直後は、WSL以外にたくさんの自動起動プログラムが動作し始めるので、ログイン後3分遅延させるようにディレイを入れておきました。
テスト結果は良好。ログインさえしておけば、cronサービス起動を忘れても自動録音出来ます。
本当は、ログインしなくてもOS再起動だけで、crondを動かしたいところです。
上記の登録したタスクを、ログイン時ではなくOS起動時に実行するようにすればいいだけだとは思うのですが、イマイチ自信を持てない。
Windows Updateによる時動作起動時に、勝手にログインまで進む方法を採用しようと思います。
下記URLページの内容を参考に、再起動後自動ログインするユーザー(radishを使うユーザー)を指定して、
https://news.mynavi.jp/article/20210310-1794533/
自動ログインするように設定しました。これで、予定外の再起動が起きたとしても、普通、再起動は夜中なので、録音開始時刻前までにログインが終わって、録音完了できる見込みです。