small_4288070002
10件のコメント

タスクスケジューラーで定期的に処理を実行させる

何をするものか?

タスクスケジューラーはWindowsの標準機能であり、決まった日時、時刻にプログラムを実行するためのものです。1度きりの実行をさせることもあれば、くり返して何度も実行させるようなことも可能です。

プログラムが起動できるということは結局なんでもできるということです。想像力を膨らませて運用を楽にしましょう。

どのように設定するのか?

タスクスケジューラーは以下の場所からアクセスします。

[すべてのプログラム] – [アクセサリ] – [システムツール] – [タスク](※Vista, 2008では「タスクスケジューラ」)

すると、実際に設定されているタスクの一覧が表示されます。Windows XPや2003以前は規定の状態では特に何も設定されていませんが、Windows Vista, 2008では規定の状態で大量にタスクが登録されています。

image

image

どちらが良い、悪い、ということもありませんが、びっくりしないようにしましょう(笑。

タスクの作成方法(XP, 2003)

タスクの作成はウィザードに従っていけばいいだけなので、簡単です。

まず、「スケジュールされたタスクの追加」を実行します。

image

image

ここで、実行するプログラムを選択します。多くの場合は「参照」ボタンを押して、バッチファイルを起動することになるでしょう。

image

image

ここで、タスクの実行単位を選択できます。コンピューター起動時やログオン時などにも実行できますが、このあたりは他にも実行手段があるので、主に使うのはその他の選択肢だと思います。

この選択肢だけを見ると、「最小単位でも”日”だから1日に何度も実行させるようなスケジュールは組めないんだな」と思ってしまいがちですが、そうではありません。きちんとそういうこともできます。が、まずはウィザードを進めていきましょう。

image

上記は「日単位」を選択した場合の画面です。毎日実行するのか、平日のみにするのか、数日おきに実施するのか、開始日をいつにするのか等を選択します。

image

次にコマンドの実行アカウントの指定画面が出てきます。ここできちんと実行する権限のあるユーザーとパスワードを入力しておかないとうまく動きませんので注意。

image

より細かい実行スケジュールのコントロールをしたければ「詳細プロパティを開く」ようにチェックボックスをつけておきましょう。もちろんここでチェックをつけなくてもあとから詳細プロパティを開き、設定変更することができます。

image

ここでは、「ログオンしている場合にのみ実行」ということをコントロール可能です。

image

「スケジュール」タブが実行感覚のコントロールの肝になってきます。「詳細設定」を押します。

image

この項目の「タスクを繰り返し実行」というのが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時間」にしておけばいいわけですね。

ちなみに、裏技チックですが、タスクの詳細画面からだと、ウィザードでは出てこない「アイドル時」に実行させるという選択肢も選べます。

image

image

設定し終わったら、必ず「タスク」にて意図した設定になっているかを確認すると良いと思います。また、パスワードのうち間違いなどの可能性もありますので、必ず「タスクの実行」を選択し、意図したとおりに起動することを確認しておくと良いと思います。

タスクの作成方法(Vista, 2008)

image

Vista, 2008ではXP, 2003よりもはるかに高機能になっています。まず、「新しいタスクの作成」を行います。

image

全般タブでは、名前や説明の他、ユーザーアカウントの指定や実行のタイミングが選択できます。注意点としてUACが有効な環境では「最上位の特権で実行する」のチェックの必要の有無を必ず確認するようにしましょう。

image

いつタスクが実行されるのか?という「トリガ」はかなり充実しています。複数登録できるので、「新規」を押していきます。

image

見てのとおりかなり柔軟に設定できます。

特にトリガとして「イベント」を選択するとイベントログの内容をかなり細かく指定できます。

image

image

image

イベントログがXML形式になっていることのメリットを生かして、XPath形式でのイベントフィルタまでかけるようになっています。

が、一部設定可能な項目が退化してしまっている部分も散見されます。

image

例えば、繰り返し間隔は5分、10分、15分、30分、1時間からしか選べなくなってしまいました。(なぜ?)

(2011/03/29追記)
繰り返し間隔は、フォーカスを当ててキーボードから入力することで任意の時間を設定できることをMr.Kさんに教えてもらいました。ありがとうございます!全然気が付きませんでした…。

image

トリガに合致したときに実行できる「操作」もなかなか充実しています。

image

image

image

image

電子メールメッセージの送信が標準で選択できるのはちょっと嬉しいですね。ですがまぁ、プログラムが起動できればなんでもできてしまうわけですからあまり意味がないといえば意味がないわけですけれども。

以前はなかった「条件」も結構充実しています。

image

細かいコントロールも結構充実しています。

image

Vista, 2008ではかなり機能Upしていますね。以前から、実行するプログラム内でロジックを組み立てて様々な制御は可能でしたが、標準機能で色々制御可能になっていることで色々とアイデアの幅がひろがるのではないでしょうか。

子供3人。家族優先。都内SIer勤務。Windows系中心のインフラよりの何でも屋。脱原発。 Microsoft MVP for System Center and Datacenter Management.

10件のコメント

  1. Mr.Kさん。コメントありがとうございます!

    手入力ができるとは全然気がつきませんでした。教えてくれてありがとうございます。ブログ本文の方にも追記させてもらいました!

    また何か見つけたら教えてもらえるとありがたいです。

  2. タスクの時間間隔ですが、プルダウンからの選択のみでなく、
    手入力も可能です。
    たとえば、「5 分」の5を1に入力し直すと「1 分」になります。

  3. akipponnさん、コメントありがとうございます。
    少しでもお役に立てたなら嬉しいです。

  4. スクリーンキャプチャーつきでわかりやすかったです(^^)
    無事 cron like なバッチ設定できました。ありがとうございます!

  5. コメントありがとうございます。

    >トリガを「他タスクの正常終了」というような設定はできるのでしょうか?

    ということですが、「タスクの正常終了」をタスクマネージャーで検知しなくても、タスクマネージャーからキックした1つのタスクの中で、「(直前の)コマンドが成功したかどうか」を判定し、正常終了時にのみだけ実行させるようなロジックで良いのでは?と思います。

    もしも、時間的に間を空けたい、ということであれば、成功、失敗をファイルにでも出力しておいて、その中身を読んで判定させるようなやり方もありかと思います。

    考えればほかにも色々アイデアは出ると思いますが、タスクスケジューラーだけでどうにかしようとしないで、もう少し大きな範囲で問題を扱ってあげると良いかと思います。

    参考になりますでしょうか?最近時間がなくてかけていませんが、次回のエントリでもらった質問を取り上げて説明しようとしてみますね。

  6. いつも参考にさせて頂いています。

    Windows Server 2008のタスクスケジューラを
    使用しています。

    1点お聞きしたいのですが、トリガを「他タスクの正常終了」
    というような設定はできるのでしょうか?

    タスク正常終了後、他タスクにてメール送信をしたいのですが
    実現方法が思いつかず悩んでいます。。

  7. fjtさん、いつもコメントありがとうございます!もっとバンバンお願いします(笑)。

    schtasksコマンドは使ったことがありませんでした。
    http://support.microsoft.com/kb/814596/ja

    なるほど、色々便利に使えそうですね!

    ジョブ管理系の運用ツールというのは、本格的に使ったことないのであまりノウハウが無いんですよね。なにせ運用の仕事をまともにしたことがないので・・・。この辺はまだまだ精進が必要です・・・。

  8. こんにちは、つけたし魔です。

    タスクスケジューラについては、
    schtasksコマンドを覚えておくと、
    設定一覧の出力ができてべんりです。
    schtasks /V

    作業後にタスク設定の証跡取得するのに便利です。

    あと、実行状態や、実行結果の終了コードが
    取得できるので、ちょっとタスクを確認するスクリプトをつくりたい
    時にはこういうのが出番です。
    (WindowsServer2003と、2008では出力の書式が変わってるっぽいのは注意)

    複雑なことやるなら、ジョブ実行ソフトの出番でしょうけども

コメントを残す

メールアドレスが公開されることはありません。