Windows全般/タスクスケジューラ


Powershellをタスクで実行すると現在タスクを実行中ですのまま終了しない

以下のようなコードでプロセスを終了させるスクリプトをタスク実行したところ、ずっと実行中のまま終了しない。
Get-Process Proc | Stop-Process

helpを見たところ、どうやら -Force をつけないと対話型になってしまうらしい。
Get-Process Proc | Stop-Process -Force

タスクスケジューラの使い方

たまに使いたくなるけど使い方がよく分からず適当に使ってるWindowsのタスクスケジューラについて調べてみた。

このへんのサイトが参考になりました。

よくあるのが1分に1回とかで延々と実行できないの?
という疑問ですね。
このへんについてを中心に書いてみます。

まず実行開始タイミングです。
タスクのスケジュールに関しては日単位とか週単位とかいろいろありますが、1分に1回実行するなら通常はまず日単位にします。
これは実は週単位でもいいんですが、まあ1分に1回なら毎日で良いでしょう。

次に開始時刻ですが、これは一番最初にプログラムを実行したい時刻にしておきます。
通常は~月~日からという依頼が多いので、その場合は0:00ですね。
~月~日9時開始といった場合は9:00にしておきます。

続けてスケジュールタブの詳細設定をクリックします。
開始日は開始したい日付を入力しておきましょう。
先程の開始時刻と合わせて、初回にプログラムが実行される日時がこれで決まります。
終了日に関しては、決まってる場合はチェックして入力しておきましょう。

続けてタスクを繰り返し実行のチェックを入れます。
ここはとても重要です。
1日より短い単位でプログラムを実行したい場合はここを設定しなければなりません。
1分単位の場合は間隔を1分にします。
そして、継続時間は24時間に設定します。

こうすることで、先程設定した開始日時にタスクが開始され、「間隔」ごとにプログラムが実行されます。
そして24時間経過すると、その繰り返しが終了します。

このように設定すると前のタスクが24時間継続して完了すると、その瞬間には次の「日単位」のタスクが走り始めることになります。
仮に初回タスク実行が1/1 0:00だとすると、そこから1分ごとに繰り返しプログラムが実行される処理が24時間継続し、1/2 0:00になる瞬間には1/1 0:00開始分のタスクが完了します。
そして1/2 0:00には1/2実行分のタスクが新たに開始して1分ごとにプログラム実行を繰り返しながら24時間継続するというわけです。

例えば継続時間を23時間に設定した場合は、毎日23時~24時の間は何も実行されない空白の時間ができることになりますね。
これは、1/1 0:00に開始したタスクが23:00で継続実行を止め、1/2 0:00になると次の日のタスクが開始するからです。

0:00ではなく9:00に設定したとすると、継続時間が24時間なら次の日の9時まで継続しますし、継続時間が23時間なら次の日の8時まで繰り返しが継続するという感じですね。
営業時間のみの実行なら継続時間を9時間とかにしておきましょう。
その後9:00になると次の日単位タスクが実行されて設定した時間継続するということです。

先程日単位ではなく週単位でも良いということを書きましたが、実行を週単位にして継続時間を168時間(24時間×7日)にすれば結局同じことになります。
ちなみに「24時間目」や「168時間目」などの継続時間が終了する瞬間の時刻には継続タスクは実行されません。
0:00からの1分ごと10分継続なら、0:10にはプログラムは実行されません。

また、設定タブのタスクの継続時間は繰り返しを設定している場合は無視されるようです。
特に気にしなくて良いですが、心配な場合はチェックを外しておきましょう。

もう一つ重要なのは、繰り返し実行時にはプログラムの多重実行は行われないということです。
前の繰り返しプログラムが終了しないと次の繰り返しプログラムは開始しません。
これには賛否両論あるとは思いますが、必ずどんな状態であっても毎分実行しなければならないなどの場合は、毎分ごとに実行するタスクを設定するか(1日分だと1440個も・・・)、素直に1分以内に確実に終了するプログラムを登録しましょう。

  • 最終更新:2016-06-21 13:59:51

このWIKIを編集するにはパスワード入力が必要です

認証パスワード