cron みたいなジョブスケジューラを Windows でも使えないかと思い、既存ツールを調べてみました。
用途別まとめ
-
「GUI で使いたい&無難に Windows 標準機能で実現したい」
- タスクスケジューラ
-
「コマンドで使いたい&無難に Windows 標準機能で実現したい」
- at コマンド, schtasks コマンド
- (PowerShell使いなら) Scheduled Tasks Cmdlets
-
「本家 cron と同じ操作感で使いたい」
- Cygwin で cron
-
「crontab 表記で使いたい」
- cronNT (C++製実行ファイル)
- CRONw (Perlスクリプト)
- pycron (Pythonスクリプト)
-
「国産で日本語ドキュメントが良い」
- cronNT
ツール一覧
タスクスケジューラ
- Windows 標準
- GUI(管理ツールみたいなUI)
- トリガー(タスクの実行タイミング)の設定が煩雑
- 以下画像を見てください
- トリガーの設定が重い
- 初回起動時に svchost.exe が一分くらいガリガリ動きやがった
Windows 標準だけあって作りは堅固だが、高機能かつ GUI も煩雑なので使い慣れるまで苦労しそう。また、GUI なので「設定ファイルに書いたらおわり」みたいな気軽な運用はしづらい。
以下はトリガー設定の画面です。
AT コマンド
- Windows 標準
- CLI
- 内部的にはタスクスケジューラ(Scheduleサービス)が動作している
タスクスケジューラに対するタスクの CRUD をコマンドで行えるというもの。
(Usage を見てみたら使い方が煩雑そうなので)多少練習が必要と思われる。 How To Use the AT Command to Schedule Tasks あたりでサンプル見た方が良いかも。
あと What is the Windows version of cron? - Stack Overflow によると、Windows のバージョンによっては at コマンドではなく schtasks
コマンドを使う必要がある。
pycron
Python 製で、crontab 表記で書ける Windows 用 cron……らしいが、かなり古い。公式サイトも死んでるので上記は紹介ブログへのリンクにした。
※(余談) pycron には kipe/pycron: Simple cron-like parser for Python, which determines if current datetime matches conditions という「crontab 表記を実現する Python ライブラリ」もある。ややこしい。
CRONw
Perl製。Windows サービスとして動作。WinXP までしか動作確認されてなくて古い。
cronNT
タスクスケジューラや AT コマンドが使えない or それでは満足できない用。インストールして、バッチファイル叩いてサービス登録して、iniファイルに crontab 表記で設定を書くという感じ。
紹介文を抜粋すると、
cronNTは、UNIXの cron/crontab ライクなスケジューラサービスです。
INIファイルにスケジュールを書き込み、サービスに登録するだけです!
使うところまでは試してないけど、(この手のソフトは英語が多いのに対して)日本語だし、README もしっかり書いてあるし、が地味にありがたい。C++ ソースも添付されているので勉強にもなる。
- 参考
Cygwin で cron
cron パッケージと cygrunsrv パッケージを使う。Windows サービスとして動作させるみたい。
Cygwin だけあって本家 cron の再現度が高いのが強みか。
PowerShell で Scheduled Tasks Cmdlets
PowerShell に Scheduled Tasks Cmdlets というコマンドレット(Powershellコマンド)がある。詳しく見てないので、タスクスケジューラをいじるものなのか、それともタスクスケジューラっぽいスケジューリング機能を実現したものなのかは不明。
PowerShell が得意な人は、調べてみても良いと思う。
- 参考
おわりに
Windows で cron っぽいことを実現する方法についてまとめてみました。他にもオススメや補足や間違い等がありましたら教えてください