Help us understand the problem. What is going on with this article?

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

More than 3 years have 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:

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away