この記事は次のような人を想定してます。
- Webサービスなどの開発環境がWindows
- Cronを使いたいけどまだ本番環境がない
- Windows上で本物のCron動かしたいな…
僕も開発環境はWindowsがほとんどです。
そしてCronジョブをAWSとかVPSを借りる前に、
WindowsだけでCronテスト実行できたらと思ってました。
その方法が分かったのでシェアします。
このページの目次
タスクスケジューラより良い方法はないのか
ググると以下のような記事がたくさん出てきます。
▼ Windowsでcron。 タスクスケジューラの使い方
タスクスケジューラを使った方法。
これも1つの方法ではあるけど力不足です。
本物のcronをWindows上だけで動かしたいんです。
そこでwsl(Windows Subsystem for Linux)の出番
これを使うと本物のCronが動かせます。
PowerShellのwslからLinuxインストール
始めにPowerShellにLinuxをインストールします。
PowerShellは管理者権限で起動して下さい。
▼ 管理者として実行すること
PowerShellを開いたら以下コマンドを実行します。
▼ Linuxデストリビューションを表示
1 |
> wsl --list --online |
▼ このように一覧表示される
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
インストールできる有効なディストリビューションの一覧を次に示します。 既定の分布は ' * ' で表されます。 'wsl --install -d <Distro>'を使用してインストールします。 NAME FRIENDLY NAME * Ubuntu Ubuntu Debian Debian GNU/Linux kali-linux Kali Linux Rolling Ubuntu-18.04 Ubuntu 18.04 LTS Ubuntu-20.04 Ubuntu 20.04 LTS Ubuntu-22.04 Ubuntu 22.04 LTS Ubuntu-24.04 Ubuntu 24.04 LTS OracleLinux_7_9 Oracle Linux 7.9 OracleLinux_8_7 Oracle Linux 8.7 OracleLinux_9_1 Oracle Linux 9.1 openSUSE-Leap-15.5 openSUSE Leap 15.5 SUSE-Linux-Enterprise-Server-15-SP4 SUSE Linux Enterprise Server 15 SP4 SUSE-Linux-Enterprise-15-SP5 SUSE Linux Enterprise 15 SP5 openSUSE-Tumbleweed openSUSE Tumbleweed |
▼ ここではUbuntuをインストールする
1 |
> wsl --install -d Ubuntu |
別にUbuntuである必要性はありません。
好きなデストリビューションを選べばOKです。
インストールが終わったらWindowsを再起動します。
Bashからcrontabでcronジョブを設定
再起動完了したらPowerShellを再び起動です。
▼ 管理者として実行すること
1 |
> wsl |
▼ 上記で動かないならインストール再実行
1 |
> wsl --install -d Ubuntu |
これでCronを使う準備が整いました。
あとはcrontabでジョブを登録するだけです。
▼ crontabをeモードで編集
1 |
# crontab -e |
▼ 試しにこんなcronジョブを登録した
1 2 |
# 毎分時刻をファイルに書き出す * * * * * /bin/date >> /tmp/cron_output |
1分ごとに時刻をファイルに追記するCronジョブです。
▼ ファイルcron_outputの出力内容
Windows環境で本物のCronジョブが動かせました。
wslからWindows内ファイルアクセスも可能
Windows上のファイルにwslからアクセス可能です。
▼ How to access Windows files from Linux in WSL?
From inside Ubuntu:
cd /mnt/c/Users/<your_Windows_username>
That should show you all the files and directories in your Windows profile (a.k.a. home) folder.引用元 : https://askubuntu.com/questions/1442124/how-to-access-windows-files-from-linux-in-wsl#answers-header
CronからもWindowsファイルの読取・書込できます。
▼ 例えばこのようなCronジョブとか
1 2 |
# 毎分時刻をWindows内ファイルに書き出す * * * * * /bin/date >> /mnt/c/Users/Hoge/cron_output |
上記の例だと C:\Users\Hoge\cron_output に出力されます。
もちろんPython・PHPなどの定期実行も可能です。
以上、Windowsで本物cron実行でした。ではまた。