タスクスケジューラーで定期的に処理を実行させる
今回はタスクスケジューラーについて書いてみようと思います。(XP, 2003に関しては)かなりシンプルなつくりになっており、私自身一度もまともにドキュメントすら読んだことが無いまま使用しておりますが、つい先日設定ミスをしてしまったこともあり、自戒をこめて・・・。
何をするものか?
タスクスケジューラーはWindowsの標準機能であり、決まった日時、時刻にプログラムを実行するためのものです。1度きりの実行をさせることもあれば、くり返して何度も実行させるようなことも可能です。
プログラムが起動できるということは結局なんでもできるということです。想像力を膨らませて運用を楽にしましょう。
どのように設定するのか?
タスクスケジューラーは以下の場所からアクセスします。
[すべてのプログラム] – [アクセサリ] – [システムツール] – [タスク](※Vista, 2008では「タスクスケジューラ」)
すると、実際に設定されているタスクの一覧が表示されます。Windows XPや2003以前は規定の状態では特に何も設定されていませんが、Windows Vista, 2008では規定の状態で大量にタスクが登録されています。
どちらが良い、悪い、ということもありませんが、びっくりしないようにしましょう(笑。
タスクの作成方法(XP, 2003)
タスクの作成はウィザードに従っていけばいいだけなので、簡単です。
まず、「スケジュールされたタスクの追加」を実行します。
ここで、実行するプログラムを選択します。多くの場合は「参照」ボタンを押して、バッチファイルを起動することになるでしょう。
ここで、タスクの実行単位を選択できます。コンピューター起動時やログオン時などにも実行できますが、このあたりは他にも実行手段があるので、主に使うのはその他の選択肢だと思います。
この選択肢だけを見ると、「最小単位でも”日”だから1日に何度も実行させるようなスケジュールは組めないんだな」と思ってしまいがちですが、そうではありません。きちんとそういうこともできます。が、まずはウィザードを進めていきましょう。
上記は「日単位」を選択した場合の画面です。毎日実行するのか、平日のみにするのか、数日おきに実施するのか、開始日をいつにするのか等を選択します。
次にコマンドの実行アカウントの指定画面が出てきます。ここできちんと実行する権限のあるユーザーとパスワードを入力しておかないとうまく動きませんので注意。
より細かい実行スケジュールのコントロールをしたければ「詳細プロパティを開く」ようにチェックボックスをつけておきましょう。もちろんここでチェックをつけなくてもあとから詳細プロパティを開き、設定変更することができます。
ここでは、「ログオンしている場合にのみ実行」ということをコントロール可能です。
「スケジュール」タブが実行感覚のコントロールの肝になってきます。「詳細設定」を押します。
この項目の「タスクを繰り返し実行」というのが1日単位よりも細かく実行させるための設定になります。わかりずらいですが、上記の設定であれば、6月30日以降の毎日23時00分になったらタスクが実行されるのですが、タスクを10分間隔で1時間実行する設定になっているので、具体的には以下の時刻に合計6回プログラムが実行されることになります。
- 23時00分
- 23時10分
- 23時20分
- 23時30分
- 23時40分
- 23時50分
- 24時00分(※この最後の1回が実行されるのかどうかはちょっと自信が無いです。実際に確認し、Updateします。)
本当に1日中10分おきにずっとプログラムを起動し続けたいなら、継続時間を「24時間」にしておけばいいわけですね。
ちなみに、裏技チックですが、タスクの詳細画面からだと、ウィザードでは出てこない「アイドル時」に実行させるという選択肢も選べます。
設定し終わったら、必ず「タスク」にて意図した設定になっているかを確認すると良いと思います。また、パスワードのうち間違いなどの可能性もありますので、必ず「タスクの実行」を選択し、意図したとおりに起動することを確認しておくと良いと思います。
タスクの作成方法(Vista, 2008)
Vista, 2008ではXP, 2003よりもはるかに高機能になっています。まず、「新しいタスクの作成」を行います。
全般タブでは、名前や説明の他、ユーザーアカウントの指定や実行のタイミングが選択できます。注意点としてUACが有効な環境では「最上位の特権で実行する」のチェックの必要の有無を必ず確認するようにしましょう。
いつタスクが実行されるのか?という「トリガ」はかなり充実しています。複数登録できるので、「新規」を押していきます。
見てのとおりかなり柔軟に設定できます。
特にトリガとして「イベント」を選択するとイベントログの内容をかなり細かく指定できます。
イベントログがXML形式になっていることのメリットを生かして、XPath形式でのイベントフィルタまでかけるようになっています。
が、一部設定可能な項目が退化してしまっている部分も散見されます。
例えば、繰り返し間隔は5分、10分、15分、30分、1時間からしか選べなくなってしまいました。(なぜ?)
トリガに合致したときに実行できる「操作」もなかなか充実しています。
電子メールメッセージの送信が標準で選択できるのはちょっと嬉しいですね。ですがまぁ、プログラムが起動できればなんでもできてしまうわけですからあまり意味がないといえば意味がないわけですけれども。
以前はなかった「条件」も結構充実しています。
細かいコントロールも結構充実しています。
Vista, 2008ではかなり機能Upしていますね。以前から、実行するプログラム内でロジックを組み立てて様々な制御は可能でしたが、標準機能で色々制御可能になっていることで色々とアイデアの幅がひろがるのではないでしょうか。
評価をお願いします
関連エントリ
- バッチファイルをExcelで作って省力化 (関連度:50%)
- アクセス権の理解(NTFSアクセス権と共有アクセス権) (関連度:50%)
- コマンドの結果をファイルに保存する(標準出力と標準エラー出力) (関連度:50%)





こんにちは、つけたし魔です。
タスクスケジューラについては、
schtasksコマンドを覚えておくと、
設定一覧の出力ができてべんりです。
schtasks /V
作業後にタスク設定の証跡取得するのに便利です。
あと、実行状態や、実行結果の終了コードが
取得できるので、ちょっとタスクを確認するスクリプトをつくりたい
時にはこういうのが出番です。
(WindowsServer2003と、2008では出力の書式が変わってるっぽいのは注意)
複雑なことやるなら、ジョブ実行ソフトの出番でしょうけども
fjtさん、いつもコメントありがとうございます!もっとバンバンお願いします(笑)。
schtasksコマンドは使ったことがありませんでした。
http://support.microsoft.com/kb/814596/ja
なるほど、色々便利に使えそうですね!
ジョブ管理系の運用ツールというのは、本格的に使ったことないのであまりノウハウが無いんですよね。なにせ運用の仕事をまともにしたことがないので・・・。この辺はまだまだ精進が必要です・・・。
いつも参考にさせて頂いています。
Windows Server 2008のタスクスケジューラを
使用しています。
1点お聞きしたいのですが、トリガを「他タスクの正常終了」
というような設定はできるのでしょうか?
タスク正常終了後、他タスクにてメール送信をしたいのですが
実現方法が思いつかず悩んでいます。。
コメントありがとうございます。
>トリガを「他タスクの正常終了」というような設定はできるのでしょうか?
ということですが、「タスクの正常終了」をタスクマネージャーで検知しなくても、タスクマネージャーからキックした1つのタスクの中で、「(直前の)コマンドが成功したかどうか」を判定し、正常終了時にのみだけ実行させるようなロジックで良いのでは?と思います。
もしも、時間的に間を空けたい、ということであれば、成功、失敗をファイルにでも出力しておいて、その中身を読んで判定させるようなやり方もありかと思います。
考えればほかにも色々アイデアは出ると思いますが、タスクスケジューラーだけでどうにかしようとしないで、もう少し大きな範囲で問題を扱ってあげると良いかと思います。
参考になりますでしょうか?最近時間がなくてかけていませんが、次回のエントリでもらった質問を取り上げて説明しようとしてみますね。