Amazon EC2 Windows Server 2008 のタスクスケジューラで四苦八苦

EBS AMI になってからは Windows Server 2008 しか準備されていないので、ひとまず色々試しています。何はともあれ、プログラムの自動起動ができないと。。。Windows Server 管理者のスキルは無いに等しいので試行錯誤のメモ書きです。前提として、タイムゾーンは JST としています。

プログラムの自動起動の選択肢

  • 独自のサービス
    • 作成したくない、というよりも実装のスキルがない
  • スタートアップ
    • 何かしらのユーザでログインしないと動作しない?
  • スタートアップスクリプト
    • 動くだろうけど、失敗時の再起方法がわからない
  • タスクスケジューラ
    • スタートアップとアイドル時起動で、途中で何らかのエラーが発生しても復帰可能

以前の Windows Server 2003 AMI では、タスクスケジューラのスタートアップは動作しない事が試して結果わかっている。恐らくタイムゾーンずれ補正をする前に起動してしまうのでおかしくなる。

しかたなく、アイドル時に起動するというタスクを組んだが、起動から15分くらいしないと処理が始まらない。。。 これでは使い物にならない。

今回の Windows Server 2008 では?やっぱり、タスクスケジューラのスタートアップはそのままでは動作しない。イベントログが見やすくなったので、見てみると。

Error Value の意味がわからないが、とりあえずタイムゾーン設定前に起動して失敗していることだけは判明。

Task Scheduler launched "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"  instance of task "TestFoldertest0"  due to system startup.
Task Scheduler failed to start "TestFoldertest0" task for user "IP-0AF00000Administrator". Additional Data: Error Value: 2147943711.

トリガー条件にアイドル時条件とスタートアップ条件の両方を指定しておくと、スタートアップ条件で失敗すると、アイドル時条件が有効にならず、そのタスクは準備状態になってしまうことも判明。

Windows Server 2008 のタスクスケジューラは賢くなっており、スタートアップ条件に詳細が設定できる。

5分待ったのちにタスク実行という条件を加えたところ、意図したとおりに動作しました!

 

タイトルとURLをコピーしました