Edited at

Windows で cron っぽいことを実現するツールやコマンド七選

More than 1 year has passed since last update.

cron みたいなジョブスケジューラを Windows でも使えないかと思い、既存ツールを調べてみました。


用途別まとめ



  • :rabbit: 「GUI で使いたい&無難に Windows 標準機能で実現したい」


    • タスクスケジューラ




  • :pig: 「コマンドで使いたい&無難に Windows 標準機能で実現したい」


    • at コマンド, schtasks コマンド

    • (PowerShell使いなら) Scheduled Tasks Cmdlets




  • :dog: 「本家 cron と同じ操作感で使いたい」


    • Cygwin で cron




  • :cat: 「crontab 表記で使いたい」


    • cronNT (C++製実行ファイル)

    • CRONw (Perlスクリプト)

    • pycron (Pythonスクリプト)




  • :tiger: 「国産で日本語ドキュメントが良い」


    • cronNT




ツール一覧


タスクスケジューラ


  • Windows 標準

  • GUI(管理ツールみたいなUI)

  • トリガー(タスクの実行タイミング)の設定が煩雑


    • 以下画像を見てください



  • トリガーの設定が重い


    • 初回起動時に svchost.exe が一分くらいガリガリ動きやがった



Windows 標準だけあって作りは堅固だが、高機能かつ GUI も煩雑なので使い慣れるまで苦労しそう。また、GUI なので「設定ファイルに書いたらおわり」みたいな気軽な運用はしづらい。

以下はトリガー設定の画面です。

taskscheduler_new_trigger.jpg


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

Windows でも cron を使う - メモ用紙

Python 製で、crontab 表記で書ける Windows 用 cron……らしいが、かなり古い。公式サイトも死んでるので上記は紹介ブログへのリンクにした。

※(余談) pycron には kipe/pycron: Simple cron-like parser for Python, which determines if current datetime matches conditions という「crontab 表記を実現する Python ライブラリ」もある。ややこしい。


CRONw

CRONw - CRON for Windows

Perl製。Windows サービスとして動作。WinXP までしか動作確認されてなくて古い。


cronNT

cronNTの詳細情報 : Vector ソフトを探す!

タスクスケジューラや 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 っぽいことを実現する方法についてまとめてみました。他にもオススメや補足や間違い等がありましたら教えてください :smile: