こんにちは。
正真正銘のインフラエンジニア、ねるです。
早くプログラマーになりたい。
ある日、僕が管理しているサーバ上でタスクスケジューラを使って定期実行しているbバッチファイルが動かなくなってしまいました。
タスクスケジューラを見てみると、前回の実行結果が拡張属性が矛盾しています(0x800700FF)となっていました。
とりあえず、バッチ処理が動かなくなるととても困るので、タスクスケジューラから実行しているbatファイルを手動で実行してみました。
そうすると、これが不思議なことに普通に動いちゃうんでさーねー。
困った時は世界中の人たちに聞いてみよう。ということであえてYahooで検索してみました。
そうすると「ユーザーアカウント制御(UAC)の設定が通知するになっているとエラーすることがある」という記述を何個も見つけました。
きっとこのパターンが1番多いんでしょうね。ですが、僕のサーバのUACは通知しない設定となっていました。
更に調べていくと、ユーザーアカウント制御(UAC)が動作した時に発生するサウンドがうまく再生出来なくて実行自体が失敗してしまうという事例を見つけました。
そもそも通知しない設定になっているので、よっぽど関係ないと思いますが念のため「Windowsユーザーアカウント制御」のサウンドを「なし」に設定しましたが、タスクスケジューラは実行できませんでした。
Microsoftのページで全く同じような事象に遭遇しているスレッドを発見しました。
英語で書かれていましたが、英語の出来ない僕でも一瞬で分かりました。
Microsoftのフォーラムで調べてみろという回答でした。厳しい世界だ。
これタスク設定がなんかおかしいんじゃね?と思い、タスクを新規作成してバッチファイルを実行してみたところ、うまく実行できました!やったー!
でもやっぱり、原因が気になるところ。うまくいったタスクと失敗するタスクの設定を見比べてみました。今夜、比べてみました。
どうやら、タスクスケジューラ内のセキュリティオプションの「タスクの実行時に使うユーザーアカウント」が「SYSTEM」となっているのが問題のようです。
これをAdministratorに変更したところ、元のタスクでもバッチファイルが実行できるようになりました!
でも、SYSTEMユーザでもタスクは実行出来るはず…というか今まで出来てた…
Administratorアカウントはパスワードを変えたりしてタスクスケジューラが動かなくなる可能性とかあるから、SYSTEMで動かすの賢いと思ってたけど、何かありそう…
本当の原因までは辿り着けませんでしたが、同じような事象で困った時はタスクの再作成を試してみてください!