none
タスクスケジューラーでのバッチが実行されない。 RRS feed

  • 質問

  • お世話になります。

    タイトルの件ですが、Windows Server 2016のタスクスケジューラーに指定した期間を過ぎたフォルダを削除するバッチを毎日実行するように登録を行っていますが、タスクスケジューラー上は正常終了(0x0)を返していますが、実際にはフォルダが削除されていません。

    手動でタスクを実行や、ログインした状態でタスクが実行されるとバッチファイルが実行され期間が過ぎているフォルダが削除されます。

    いろいろ原因を探しているのですがなかなか解決に至らない為、ご教授いただけませんでしょうか。

    タスクスケジューラーは以下のように設定しています。

    全般

    実行時に使うユーザー:ドメイン内のAdministrator

    ユーザーがログオンしているかどうかにかかわらず実行するを選択

    最上位の特権で実行するにチェック

    トリガー

    毎日23:59に実行タイムゾーン間での同期にチェック

    有効にチェック

    操作

    プログラムの開始

    プログラムにC:\実行ファイル\バッチファイルを指定

    開始オプションにC:\実行ファイルを指定

    条件

    電源の2項目のみチェック

    設定

    タスクを要求時に実行するにチェック

    タスクを停止するまでの時間:3日間

    要求時に実行中のタスクが終了しない場合、タスクを強制的に停止するにチェック

    以上となります。宜しくお願い致します。

    2019年8月9日 1:36

回答

  • ご連絡が遅くなりました。

    ご教授いただいた結果、正常にタスクスケジューラにて実行され削除予定のフォルダが削除されたことを確認いたしました。

    上記でも記載いたしましたがバッチファイルの実行が23:59であった為、容量確保のために日中に実行していたのでタスク実行時間には対象がすでになくバッチが実行されていないと勘違いしておりました。

    0:01にタスク実行時間を変更したところ、自身の想定していた結果となりました。

    いろいろとご教授いただきありがとうございました。

    • 回答としてマーク 神楽 2019年8月27日 2:24
    2019年8月27日 2:24

すべての返信

  • バッチの内容が分からないので何とも言えませんが、取り合えず実行しているバッチの結果を出力するようにしてみてはいかがでしょうか?

     

    http://coffeekko.com/batlog/

    2019年8月11日 14:02
  • 返信ありがとうございます。

    確認が遅くなり申し訳ありません。

    バッチファイルですが期間を過ぎたフォルダを削除するように下記のような内容で作成しています。

    @echo off

    setlocal

    set TARGET_DIR="ターゲットフォルダ"


    forfiles /d -176 /p %TARGET_DIR% /c "cmd /c rmdir /s /q @path"

    endlocal

    投稿時にも記載いたしましたが手動やログインした状態でのタスクの実行では正常に動作している為、バッチファイル上は問題がないと判断しております。

    2019年8月13日 6:55
  • バッチ内容に問題があると指摘する意図はあまり無く、バッチがタスクスケジューラの仕様などにより意図しない動作となっている可能性がありそうなので、事実確認するために結果を出力してはどうかと提案した次第です。
    2019年8月13日 14:26
  • ご回答ありがとうございます。

    ご教授いただきましたURLを参考にログを出力するようにバッチファイルを編集しましたがログがうまく出力されずバッチファイル自体が動作しなくなりました。

    編集内容は以下となります。

    @echo off

    setlocal

    SET BAT_LOG=%~dp0log\%COMPUTERNAME%.log

    set TARGET_DIR="ターゲットフォルダ"

    forfiles /d -176 /p %TARGET_DIR% /c "cmd /c rmdir /s /q @path"  > %BAT_LOG%

    endlocal

    申し訳ありませんが引き続きご教授いただけますでしょうか。

    2019年8月14日 1:10
  • Windows Server は触った事が無いので的外れならごめんなさい。

    2点確認です。

    (1) "ターゲットフォルダ" はローカルリソースでしょうか?

    ログオンしていない場合に失敗するなら、ネットワークリソースが認証されていない可能性を疑います。
    なお、バッチを exit %errorlevel% で終了すると、最後に実行したコマンドのエラーコードをタスクスケジューラで確認できます。

    (2) ログを出力される際に、予め C:\実行ファイル\log は作成されましたか?

    リダイレクト ">" では、ファイルは作成されますが、フォルダは作成されません。

    2019年8月14日 8:57
  • もっと単純に、

    ECHO 1 > C:\~~~\1.log

    とかでいいのでは?

    コマンド毎に追加すればどこまで進んでいるかの判別にもなるかと思います。

    2019年8月14日 9:24
  •  

    フォーラムにご投稿くださいましてありがとうございます

    その後の状況はいかがでしょうか。


    参考になった投稿には「回答としてマーク」をご設定ください

    ご不明な点がございましたら、お気軽にお問い合わせください

     

    Fan


    Please remember to mark the replies as an answers if they help. If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com

    2019年8月16日 3:00
    モデレータ
  • 先日返信した内容が消えていますが、M14Clusterさんのご指摘いただきましたフォルダの作成をしていなかったので作成し、バッチファイルを実行したところログファイルが作成されたことを確認しました。

    ログの記述はありませんでしたが、ログ出力できたのでタスクマネージャから実行された際の動作を確認しようと思い、翌日にログファイルを確認したところ作成日が更新されておらず、バッチ自体が実行されていないことを確認しました。

    タスクマネージャの履歴を確認したところタイムアウトしており、手動でタスクを実行した際には通常であればすぐに終わる処理にもかかわらず実行中のままになります。あまりにも長かったため、手動で終了しておりますが、結局原因がわからない状況となります。

    2019年8月21日 8:05
  • >タスクマネージャの履歴を確認したところタイムアウトしており、

    であるなら、バッチ自体が実行されていないのではなく、forfiles で処理が滞っているように思われます。

    バッチが forfiles に到達しているかの確認のため、下記の様にして forfiles の前後でもログを出力することをお勧めします。

    echo %date% %time% begin >> %BAT_LOG%
    forfiles /d -176 /p %TARGET_DIR% /c "cmd /c rmdir /s /q @path" >> %BAT_LOG% 2>&1
    echo %date% %time% end >> %BAT_LOG%

    > の代わりに >> とすることで追記になります。

    また、forfiles の最後に 2>&1 を記述しないと、エラー出力を記録できません。

    2019年8月21日 15:42
  • M14Clusterさん

    ご返信ありがとうございます。

    ご教授いただきました内容でログファイルの出力設定を行いました。すでに手動でバッチファイルを実行してしまったので削除対象がない為、明日また確認させていただきます。

    1点気になっているのがログファイルの出力記述をした場合のみ実行に時間がかかっていることが気になっています。ログファイル出力記述を削除し昨夜実行したところタスクスケジューラの実行結果は正常終了となっていました。

    結果を確認しましたらご報告させていただきます。

    2019年8月22日 1:36
  • >削除対象がない為、明日また確認させていただきます。

    システム管理の基本姿勢だと思いますが、処理対象が多数のユーザが使っているファイルの場合、実環境で実行する前に、別のパスで疑似環境を作り、テスト用のタスクも作って何度でもテストするべきです。

    /d オプションを外せば、今作ったばかりのフォルダーでもテストはできるはずです。

    また、forfiles 以外に原因があるかもしれませんので、もっとも単純なバッチでテストすることも必要です。

    マルチバイト文字を含むパスも環境によっては不具合の原因になる可能性もあります。

    例えば、C:\TEST というフォルダを作成し、バッチの内容は

        echo TEST > C:\TEST\TEST.LOG 

    だけとし、ActiveDirectory の影響も排除するため、ドメインアカウントではなくローカルの Administrator でで実行してみたらどうでしょうか?

    原因が分からないときは、問題の切り分けが重要です。

    2019年8月22日 3:49
  • M14Clusterさん

    ご返信ありがとうございます。

    ごもっとなご指摘かとは思いますが、削除しているフォルダ内のファイルは特にユーザー影響のないファイルですのでバッチファイルが正常に動けば特に問題ないと考えております。ただ、手動実行の工数をなくすためにタスクスケジューラでの実行できればと試行錯誤しております。

    ローカルアドミニストレーターの件ですが、バッチファイルの実行しているサーバ自体がADサーバかつAWS環境のサーバの為、ローカルアドミニストレーターでの設定が困難な状況となります。

    2019年8月22日 7:05
  • お世話になります。

    ログ出力設定を行った後の結果ですが、正常にログ出力されておりただし、実施時間が23:59と昨日中であった為、削除対象がなかったため以下のようなログが記述されておりました。

    2019/08/22 23:59:02.20 begin 
    エラー: 指定した検索条件でファイルが見つかりませんでした。
    2019/08/22 23:59:02.25 end 

    また、実行するアカウントをAdministratorから自身のドメインアカウントに変更しました。

    実行時刻を0:01に変更し今週末にフォルダが削除されているか確認いたします。

    2019年8月23日 6:07
  • ご連絡が遅くなりました。

    ご教授いただいた結果、正常にタスクスケジューラにて実行され削除予定のフォルダが削除されたことを確認いたしました。

    上記でも記載いたしましたがバッチファイルの実行が23:59であった為、容量確保のために日中に実行していたのでタスク実行時間には対象がすでになくバッチが実行されていないと勘違いしておりました。

    0:01にタスク実行時間を変更したところ、自身の想定していた結果となりました。

    いろいろとご教授いただきありがとうございました。

    • 回答としてマーク 神楽 2019年8月27日 2:24
    2019年8月27日 2:24