Windowsが新しくなるとタスクスケジューラがデグレしている気がする今日この頃。
今回はタスクスケジューラで発生したエラーをご報告です。
環境
まずは今回のエラーが発生した環境から。
Windows Server 2022です。LTSCとなるWindows Serverの2022はWindows10で言うところの21H2と同等になります。
新しいOSだけに、以前のバージョンでは発生していなかった動作をみせました。
実施した操作
BunBackupでファイルバックアップをタスクスケジューラ経由で実行させる、という作業を実施しました。(ここでの画面はすべてBunBackupでの操作画面です。)
タスク自体はいつも(以前のWindows2016や2019以前でも動作していたのと同じ手順)通りに実施しています。ざっくり記録しておきます。
BunBackupのメニューから「自動バックアップ」を選択してタスクスケジューラにタスクを作成します。
タスク登録画面でタスクスケジューラの表示名を入力し、タスクスケジューラにタスクが登録されます。
次の画面では、
既にタスクスケジューラの画面が表示されます。詳細なスケジュールを入力することになります。(繰り返しなど。)
完了すると、
完了メッセージと共に、タスクスケジューラへの登録が完了します。(ここからタスクスケジューラの画面になります。)
完了したタスクをさっそく(手動で)実行してみようとすると、
※右クリックで「実行する」を選択すると、
このようにエラーになってしまいます。
エラーメッセージは後述。
エラー内容
手動で実行すると前述のエラーが出るため、正常にジョブが実行されない状態にあります。スケジュールしていた時間になってもジョブがタスクスケジューラから実行されないので、手動でも自動でもタスクは実行されない=タスクに問題あり、ということは分かりました。
※エラーメッセージ
---------------------------
タスク スケジューラ
---------------------------
タスク テストバックアップ でエラーが発生しました。エラー メッセージ: 選択されたタスク "{0}" が存在しません。現在のタスクを表示するには、[最新の情報に更新] をクリックしてください。
---------------------------
OK
---------------------------
Windowsのバージョンが新しくなったときに、以前動作していたものが動作しなくなるというのは、前回<BunBackupのログオフ状態でバックアップを試してみる。 - treedown’s Report>でもあったなぁと思い出しました。
ただ、エラーの種類は違いますが、原因としてはWindowsのバージョンが新しいことで動作が異なっていると言う点で間違いなさそうに思えました。
考えてみる
以前<BunBackupのログオフ状態でバックアップを試してみる。 - treedown’s Report>の対処法としては、ソフトを互換モードで動作させるか、旧バージョンを使用することで問題が回避出来ていました。
過去バージョンを試すか、互換性設定を試してみるかの二択を考えたのですが、そもそもWindows Server 2022のタスクスケジューラが動作に問題があるとしたらこれじゃないことになるなぁ、とも思いました。
そもそも手動でバックアップを動作させるとどうなる?ということから動作確認してみよう(ってやってなかったのか、というツッコミは置いといて)と思い、BunBackupから手動で
バックアップを実行してみると、問題なくバックアップが完了=動作に問題はない、ということが確認出来ました。
じゃあコマンドかバッチファイルにして実行してみるとどうなるか、を確認してみると、これも問題なくバックアップが完了=動作に問題はない、という結論に至ります。
タスクスケジューラを絡めた時だけ(正確には"タスクスケジューラ経由で起動しようとしたとき"だけ)問題が発生する、という切り分けはできたように思えました。
タスクを手動で作り直してみる
手動で動作するし、コマンドラインでのバックアップ実行も正常に動作するので、Windowsのタスクスケジューラ側の問題だろうという結論でよさそうです。
アプリケーション経由で作成したタスクではエラーになるけど、さすがにタスクスケジューラのウィザードから作成したタスクならエラーにならないだろうと考え、手動で再作成することにしました。
まず、エラーになるタスクを削除します。
タスクを削除したら、タスクスケジューラの画面から「基本タスクの作成」を選択して、同じタスクを作成していきます。
スケジュールは、
自分の実行させたい日時を指定していきます。
次の画面、タスクの操作=実行したい動作、ではプログラムの開始を選択して、
実行するプログラムの指定で、
コマンドラインで動作確認したコマンド&オプション(引数)を画面にコピー&ペーストで追加していきます。
※記載内容は仮のもので実際と異なっています。
これで完了します。完了後、
タスクのプロパティ画面で必要に応じてジョブのオプションを設定しておきます。(今回はログオフ状態でも動作するように上記を設定。)
動作確認と結論
このように、改めて手動でタスクスケジューラのウィザードからタスクを(まったく同じ内容で)再設定したところ、動作がエラーになっていたジョブが正常に設定した通り実行される、ということが確認出来ました。
こうして、結論に至ります。
BunBackupのメニューからタスク作成する機能を使うと、今回のエラーになるらしい。今回はたまたまBunBackupが対象ですが、他のアプリケーションでも同様の動作がありそうに思えます。
エラーにならないようにタスクスケジューラにタスクをセットするには、
「手動でタスクを作成して、BunBackupの起動と.lbkファイル(を引数に指定して)を入力するようにする」
ことで、動作させることができました。アプリケーションが作ってくれたタスクの情報をそのまま転記してもいいと思います。