WindowsのWSL(Windows Subsystem for Linux)2で動作するUbuntuでsystemdが使えるようになったことで、これまではちょっとした手を加えて実現する必要のあった機能がスムーズに使えるようになった。

cronを使ったタスクスケジューリングもそうした機能の一つだ。WindowsのタスクスケジューラとUbuntuのcronを使うことでWindowsはさらに扱いやすくなる。今回からこの「cron」について取り上げる。→連載「WindowsでUbuntuをはじめる」のこれまでの回はこちらを参照

Ubuntuを起動

まずは、Ubuntuを起動する。スタートメニューから「Ubuntu on Windows」を選択すればよい。

  • スタートメニューから「Ubuntu」を起動

    スタートメニューから「Ubuntu」を起動

  • Ubuntu / Windows Terminal

    Ubuntu / Windows Terminal

「Ubuntu on Windows」を選択すると、上のようなターミナルアプリケーションが起動してくる。ここでUbuntuのコマンドを実行する。

systemdを有効化する

続いて、WSL2で動作するUbuntuでsystemdを有効化する。これまでに説明したように、この機能は使えるようになったものの、デフォルトでは有効化されていない。このため、/etc/wsl.confに次の設定を追加して機能を明示的に有効化する。

/etc/wsl.conf

[boot]
systemd=true

設定を追加したらUbuntuを再起動するか、Windowsを一旦再起動する。

cronを有効化する

systemdが有効になったら、次はcronを有効化する。cronは最初から有効になっていると思うので、「systemctl status cron」のようにコマンドを実行すれば次のようにcronが動作していることを確認できる。

systemctlコマンドでcron(8)が動作していることを確認

daichi@VAIO-SX14:~$ systemctl status cron
● cron.service - Regular background program processing daemon
     Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2023-06-21 14:18:16 JST; 10min ago
       Docs: man:cron(8)
   Main PID: 317 (cron)
      Tasks: 1 (limit: 19002)
     Memory: 476.0K
     CGroup: /system.slice/cron.service
             └─317 /usr/sbin/cron -f

Jun 21 14:18:16 VAIO-SX14 cron[317]: (CRON) INFO (pidfile fd = 3)
Jun 21 14:18:16 VAIO-SX14 cron[317]: (CRON) INFO (Running @reboot jobs)
Jun 21 14:23:01 VAIO-SX14 cron[317]: (daichi) RELOAD (crontabs/daichi)
Jun 21 14:23:01 VAIO-SX14 CRON[748]: pam_unix(cron:session): session opened for user daichi by (uid=0)
Jun 21 14:23:01 VAIO-SX14 CRON[749]: (daichi) CMD (/mnt/c/WINDOWS/system32/notepad.exe)
Jun 21 14:23:05 VAIO-SX14 CRON[748]: pam_unix(cron:session): session closed for user daichi
Jun 21 14:24:01 VAIO-SX14 CRON[1798]: pam_unix(cron:session): session opened for user daichi by (uid=0)
Jun 21 14:24:01 VAIO-SX14 CRON[1799]: (daichi) CMD (/mnt/c/WINDOWS/system32/notepad.exe)
Jun 21 14:24:15 VAIO-SX14 CRON[1798]: pam_unix(cron:session): session closed for user daichi
Jun 21 14:25:01 VAIO-SX14 cron[317]: (daichi) RELOAD (crontabs/daichi)
daichi@VAIO-SX14:~$

もし次のような出力が返ってきた場合、cronが無効になっている。

cron(8)が無効になっている場合の出力サンプル

daichi@VAIO-SX14:~$ systemctl status cron
● cron.service - Regular background program processing daemon
     Loaded: loaded (/lib/systemd/system/cron.service; disabled; vendor preset: enabled)
     Active: inactive (dead)
       Docs: man:cron(8)

daichi@VAIO-SX14:~$

その場合には次のようにコマンドを実行してcronを有効化する。

cronを有効化するコマンド実行サンプル

daichi@VAIO-SX14:~$ sudo systemctl enable cron
Synchronizing state of cron.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable cron
Created symlink /etc/systemd/system/multi-user.target.wants/cron.service → /lib/systemd/system/cron.service.
daichi@VAIO-SX14:~$

コマンドを実行して次のようにcronが有効化したことを確認する。

cron(8)が動作するようになったことを確認

daichi@VAIO-SX14:~$ systemctl status cron
● cron.service - Regular background program processing daemon
     Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2023-06-21 14:18:16 JST; 11min ago
       Docs: man:cron(8)
   Main PID: 317 (cron)
      Tasks: 1 (limit: 19002)
     Memory: 476.0K
     CGroup: /system.slice/cron.service
             └─317 /usr/sbin/cron -f

Jun 21 14:18:16 VAIO-SX14 cron[317]: (CRON) INFO (pidfile fd = 3)
Jun 21 14:18:16 VAIO-SX14 cron[317]: (CRON) INFO (Running @reboot jobs)
Jun 21 14:23:01 VAIO-SX14 cron[317]: (daichi) RELOAD (crontabs/daichi)
Jun 21 14:23:01 VAIO-SX14 CRON[748]: pam_unix(cron:session): session opened for user daichi by (uid=0)
Jun 21 14:23:01 VAIO-SX14 CRON[749]: (daichi) CMD (/mnt/c/WINDOWS/system32/notepad.exe)
Jun 21 14:23:05 VAIO-SX14 CRON[748]: pam_unix(cron:session): session closed for user daichi
Jun 21 14:24:01 VAIO-SX14 CRON[1798]: pam_unix(cron:session): session opened for user daichi by (uid=0)
Jun 21 14:24:01 VAIO-SX14 CRON[1799]: (daichi) CMD (/mnt/c/WINDOWS/system32/notepad.exe)
Jun 21 14:24:15 VAIO-SX14 CRON[1798]: pam_unix(cron:session): session closed for user daichi
Jun 21 14:25:01 VAIO-SX14 cron[317]: (daichi) RELOAD (crontabs/daichi)
daichi@VAIO-SX14:~$

cronはLinuxなどのオペレーティングシステムでタスクスケジューリングを司るもっとも基本的なプログラムのひとつなので有効になっていることが多い。WindowsにインストールしたUbuntuにおいて手動でこの機能を有効化することはほとんどないと思うが、そのような設定になっているときには上記方法で有効化してもらえればと思う。