====== タスクスケジューラー ====== 各タスクは多重起動されない(繰り返し実行する設定でも現在のタスクが終了しない限り、次のタスクは実行されない) ===== ログが出力されない場合 ===== 原因は、作業フォルダの設定が無いため\\ 作業フォルダの設定は、実行するプログラムを指定する際にある「開始(オプション)(T):」にログを出力するフォルダを指定する。\\ 参照:[[http://tips.recatnap.info/wiki/Win%E3%81%AE%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%A9%E3%81%8C%E5%AE%9F%E8%A1%8C%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84%E3%81%A8%E3%81%8D%E3%81%AE%E5%AF%BE%E5%BF%9C|Winのタスクスケジューラが実行されないときの対応]] もしくは、実行するプログラムがバッチファイルであれば、バッチ内で下記コードを記述してカレントフォルダを指定する。 cd /d %~dp0 ===== 繰り返し時間をプルダウン以外にしたい場合 ===== プルダウン・リストボックスにない間隔は、「1234 秒間」「12 分間」「3 時間」「01:23:45」といったように直接入力できる。\\ * [[http://www.atmarkit.co.jp/ait/articles/1007/30/news111.html|Windowsのタスクスケジューラーで数分おきにプログラムを繰り返し実行する]] * [[https://tech-mmmm.blogspot.com/2017/12/1.html|タスクスケジューラーを使って1分間隔で実行するタスクを作成する方法]] ===== 継続時間の仕様 ===== タススケジューラーの仕様\\ https://docs.microsoft.com/ja-jp/windows/win32/taskschd/repeating-a-task 繰り返し間隔が1分、繰り返し時間が4分であるトリガーを含むタスクを登録すると、タスクは5回開始されます。5回の繰り返しは、次のパターンで定義できます。 - タスクは最初の1分の始めに始まります。 - 次のタスクは最初の1分の終わりに始まります。 - 次のタスクは2分の終わりに始まります。 - 次のタスクは3分の終わりに始まります。 - 次のタスクは4分の終わりに始まります。 毎日6:00から繰り返し間隔1時間で4:00と5:00の監視は外したい場合に継続時間22時間とすると4:00の監視は動作してしまうので、継続時間は想定より1回分少ない21時間で設定する。\\ ※設定を継続時間1日から22時間に変更した初回は3:00の監視が動作せず、次の日は4:00の監視は動作した。 ===== コマンドプロンプト画面を表示 ===== 全般タブのセキュリティオプションで「ログオンしているときのみ実行する」とする。\\ タスクマネージャーで、「Console」ユーザーにメッセージ送信する。 逆に「ログオンしているかどうかにかかわらず実行する」になっていれば、必ずバックグラウンドで実行されるので、コマンドプロンプトの姿を見ることはできません。 ===== PowerShellの青い画面を非表示 ===== タスクスケジューラーでPowerShellを動かすと一瞬青い画面が表示される。これを非表示化したい。 conhost.exe --headless を使用することで、powershell の一瞬青い画面が表示されなくなります。\\ [[https://yoiegao.net/powershellスクリプトを非表示で実行するための効果的な/#toc10|PowerShellスクリプトを非表示で実行するための効果的な方法と手順 - conhost.exeを使った方法]] ==== サンプル ==== ^プログラム|conhost.exe| ^引数の追加|--headless powershell -NoProfile -ExecutionPolicy Bypass D:\web_projects\wh_rdp\GetClientName.ps1| ^開始|D:\web_projects\wh_rdp| NoProfileは、PowerShellの実行時に読み込む環境情報を読み込まないため、起動が多少速くなる 開始(オプション)のパスはPowerShellスクリプトの作業用の「カレントディレクトリ」を指定するため ==== タスクスケジューラーのフォルダ作成 ==== [[https://devblogs.microsoft.com/scripting/use-powershell-to-create-scheduled-tasks-folders/|Use PowerShell to Create Scheduled Tasks Folders]] ルート直下に「Test」フォルダ作成を作成する。 $scheduleObject = New-Object -ComObject schedule.service $scheduleObject.connect() $rootFolder = $scheduleObject.GetFolder("\") $rootFolder.CreateFolder("Test") ===== タスクスケジューラーのエラーコード ===== ^コード^説明^ |0 (0x0)|この操作は正しく終了しました。| |1 (0x1)|関数が正しくありません。| |2 (0x2)|指定されたファイルが見つかりません。| 英語のところは日本語に翻訳する。\\ * [[https://ascii.jp/elem/000/001/432/1432965/|Windowsシステムエラーコード一覧]] * [[http://www005.upp.so-net.ne.jp/neko-note/index.files/3rd/error/system-code.html|Windowsで表示されるエラーコードの見方]] * [[https://docs.microsoft.com/ja-jp/windows/desktop/TaskSchd/task-scheduler-error-and-success-constants|Task Scheduler Error and Success Constants]] * [[https://docs.microsoft.com/ja-jp/windows/win32/debug/system-error-codes|system-error-codes]] ===== トラブル対応 ===== ==== タスクが終了しない ==== タスクが実行するバッチ内で、pause コマンドが入ったままになっていた。 ==== 0x8004131F ==== 0x8004131F:An instance of this task is already running.\\ 0x8004131F:このタスクのインスタンスは既に実行中です。 対処方法として、タスクマネージャーで実行中のcmdを終了させる。\\ どれかはコマンドライン引数で判断する。\\ {{:運用:opened-cursor.png|}} ==== 0x800710E0 ==== サーバー起動時に発生、再起動では発生していない。\\ 0x800710E0:オペレーターまたは管理者が要求を拒否しました。 対処方法として、タスクスケジューラーの条件タブの「コンピューターをAC電源で使用している場合のみタスクを開始する」をオフに設定する。 {{:運用:タスク電源.png|}} ==== 0x80070002 ==== 0x80070002:指定されたファイルが見つかりません。 対処方法として、指定のファイルが見つからないので設定を見直す。 ==== 0x41303 ==== 0x41303:タスクは実行されていません。 対処方法として、タスクを実行する。もしくはタスクスケジューラーの開始日を未来の日付にする。 ==== 操作を2つ以上設定したタスクの実行が失敗 ==== 操作タブにbat実行等2つ以上設定している場合にサーバ起動後の初回とそれ以降の自動実行がエラーになる場合がある。 === 現象 === タスク スケジューラにて、タスクに “操作” を複数 (2 つ以上) 登録した場合、タスクのスケジュール時刻がスキップされたタイミング以降に、タスクがスケジュール実行されなくなる問題があります。 [[https://social.technet.microsoft.com/Forums/office/ja-JP/c0c45d01-5ccc-441b-ae20-8e1d5876df29/258052031612434-2?forum=Wcsupportja|操作を 2 つ以上設定したタスクの実行が失敗する問題について]] === 対応 === [設定] タブにて「タスクスケジュールされた時刻にタスクを開始できなかった場合、すぐにタスクを実行する」にチェックを入れる。 === 対処策 === 操作を1つにしていただくことで回避が可能