Windows
cron
JobScheduler

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

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: