Windows Server 2003を使用していますが、スケジュールされたタスクを完了できません。このタスクは、毎日午後3時にWindowsコマンドスクリプト(.cmd)を実行するように設定されています。スクリプトは、SQL Serverデータベースから一部のデータを抽出し、そのデータをFTPサーバーにアップロードするプログラムを実行します。
スケジュールされたタスクフォルダーの[最終結果]列に表示されるエラーコードは0xc000013aです。 Googleをすばやく検索すると このMicrosoftサポートページ が表示されます。最も一般的な「C」エラーコードは「0xC000013A:CTRL + Cの結果としてアプリケーションが終了しました」です。
タスクの実行時に誰もログインしていないので、CTRL + Cを押しても誰もいません。 Microsoftのドキュメントでここで何が言っているのか理解できません。
基本的なことを確認しました-スケジュールされたタスクが有効で、毎日実行するようにスケジュールされ、有効な場所に存在するファイルをポイントしています。興味深いことに、このタスクを手動で(コマンドラインから.cmdスクリプトを実行するか、タスクを右クリックして[実行]をクリックして)実行すると、タスクは正常に完了します。
このエラーコードはどういう意味ですか、また、強制的にそこにいないときにこのタスクを実行するにはどうすればよいですか?
スケジュールされたスクリプトのトラブルシューティング:
まだの場合は、GUIのAdvanced> View Logの下にあるScheduled Tasksログファイルを確認してください。ファイルで「***
"を使用して最新のエントリを検索すると、少し余分なエラー情報が表示される場合があります。
ログファイルを定義して出力をキャプチャし、標準出力と標準エラーの両方を送信します。 echo OFFをecho ONに変更して、エラーメッセージが表示されないようにします。
たとえば、スクリプトがftp.data.cmd
すると、スケジュールされたタスクは次のようになります。
cmd /c ftp.data.cmd >> ftp.data.log 2>&1
スクリプトがハングしていますか?たぶん、タスクスケジューラは、指定された期間が経過した後、スクリプト(つまりCTRL + Cエラーコード)を強制終了しています。 sciptの戦略的なポイントにこれらのいくつかを追加し、
echo %DATE% %TIME%
スクリプトを実行しているアカウントに、スクリプト内のすべてに対する権限/アクセス権があることを確認しますか?
喜びが得られない場合は、このコマンドを実行して、ここに出力を投稿してください。おそらく、スケジュールから始めることができます。
schtasks /query /v /fo LIST /s YOURSERVER
エラーメッセージの意味がわからない(したがって、それを修正する方法もわからない)ため、質問に直接回答することはできませんが、トラブルシューティングを行う場合は、次の場所にあるログファイルにいくつかの書き込みを追加します。スクリプトの戦略的ポイントを確認し、スケジュールされた時間の後に、実行する最後のチェックポイントを確認します。
私の疑いは、スクリプトが実行されている資格情報のために失敗している何かがあるか、スクリプト内の何かがログインしているユーザーを必要としていることでしょう。スクリプトのどこが失敗するかを絞り込むと、「問題のある」コードを見つけるのに役立つ場合があります。
今日、リモートサーバーでこの問題に遭遇しました。解決策は、実行設定を「ユーザーがログオンしているときのみ実行する」から「ユーザーがログインしているかどうかにかかわらず実行する」に変更することでした。
「ユーザーがログオンしているときにのみ実行する」では、リモートデスクトップセッションがタイムアウトしたときに閉じていたコマンドウィンドウがタスクによって起動されます。 「ユーザーがログインしているかどうかにかかわらず実行する」では、タスクの実行中にウィンドウが表示されないため、リモートデスクトップセッションが終了しても実行が停止しません。
これは古い投稿であることに気づきましたが、解決策を探すときに非常に役立ち、おそらく私が見つけたものも役立つかもしれません。 Windows Server 2003でWinSCPを使用してFTPサーバーにアップロードし、同じエラーメッセージを受け取り、SchedLgU.txtファイルが、「タスクが発生したら停止する:」セクションでタスクを指定したにもかかわらず、十分な時間がないことを指摘しましたアップロードするのに十分な時間。
タスクマネージャーを見ると、WinSCP.exeがクリアされておらず、リストに多数のプロセスが含まれていることがわかりました。そこで、開いているプロセスを強制終了するバッチファイル(taskkill/f/im winscp.exe)を作成しました。 WinSCPの前にそのバッチファイルを実行してください。
これが以前に実行された場合、おそらくネットワークの停止または別のホストの問題のような状態が失敗を説明している可能性があります。
タスクスケジューラの制御下でプログラムを実行しようとすると、System.Environment.CurrentDirectoryは、実行可能ファイルが置かれている場所ではなく、C:\ Windows\System32を返します。このエラーは、ファイルが見つからないエラーである可能性があります。サブディレクトリにログを記録しようとしたところ、System32ツリーに存在しませんでした。
同じエラーが発生しました。これは、実行中のバッチファイルが、DELコマンドでいくつかのファイルを削除するように要求していたためです。 Y/Nでバッチ処理を行うユーザーがいないため、スケジュールされたタスクは終了します。次のメッセージは、スケジュールされたタスクログで見つかりました。私の推奨は、コマンドプロンプトから手動でタスクを実行して、停止またはユーザーインタラクションのプロンプトが表示されている場所を確認し、修正してタスクを正常に実行することです。
Coriの回答と同様に、タスクを実行しているユーザーアカウントにログインユーザーと同じ権限がない場合にこのエラーが発生するのを確認したので、スケジュールされたタスクが実行されるように設定されているユーザーを確認することをお勧めします
同じ問題があり、トリガーを「システム起動時」から「ログオン時」に変更することで修正しました。
同じ問題がありました。スケジュールされたタスクを実行するように登録されているユーザーと遊ぶことで修正されました。結局、ドメインを変更することが答えでした。
私のスクリプトではこれは明らかです。バッチファイルの最後に「一時停止」があり、スケジュールされたタスクが20分に制限されていることが原因です。ユーザーがいると、仕事の流れがわかります。バッチファイルがスケジュールされたタスクによって20分後に終了しない場合。これは0xc000013aの原因であり、問題ありません。