Windows10: WSLのcronサービスを自動起動させる

ラジコの自動リアルタイム録音に、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/

自動ログインするように設定しました。これで、予定外の再起動が起きたとしても、普通、再起動は夜中なので、録音開始時刻前までにログインが終わって、録音完了できる見込みです。

コメントを残す