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分待ったのちにタスク実行という条件を加えたところ、意図したとおりに動作しました!