web-dev-qa-db-ja.com

Windowsタスクスケジューラがバッチファイルタスクを開始しない

SQL Reportサービスを停止および開始するための以下のコードを含むバッチファイルがあります。

net stop "SQL Server Reporting Services (MSSQLSERVER)" 

timeout /t 10

net start "SQL Server Reporting Services (MSSQLSERVER)"

スケジュールされたタスクを毎日実行するように設定しましたが、現在は最高の特権が設定されたSYSTEMとして実行されています。アクションでフォルダーで開始オプションを設定しましたが、通常はすべてが正しく設定されているようです。しかし、タスクを実行すると何も起こらないようで、タスクは実行されたと表示されますが、意図したとおりにサービスが再起動されたことがわかりません。

誰かが私に欠けているものに導くことができますか?ありがとう

28
jimminybob

'Start in'および'Program/script'オプションを正しく設定してください。ファイルアドレスがC:\ Temp\foo.batの場合、「start in」オプションを「C:\ Temp」に、「Program/script」オプションを「foo.bat」に設定します。

[開始]オプションを設定するには:タスクスケジューラでタスクを右クリック> Properties > Actions > Edit.

これだけではうまくいかない場合は、.batファイルを基本的な権限を持つディレクトリ(たとえば、共有ディレクトリ)に移動してみてください。

.batファイルがいくつかの制限付きアクセス許可を持つフォルダーに配置されているため、ユーザーアカウントのみがアクセスできるという問題がありました。資格情報を使用するようにタスクスケジューラを設定したにもかかわらず、失敗しました。 .batファイルを別のディレクトリに移動すると、問題がソートされました。

72
ninjaPixel

この馬鹿げた問題に多くの時間を浪費しました!

バッチファイルの最初の行でバッチファイルが存在する場所にcdコマンドを追加し、問題が解決するかどうかを確認します。

cd D:\wherever\yourBatch\fileIs

ヒント:絶対パスを使用してください。相対パスは理想的には問題になりませんが、スケジューラーはそれらを理解するのが困難です。

11
MoMo

同じ問題がありました。これは特権の問題だと思います。 [ユーザーがログオンしているときにのみ実行する]が選択されている場合は、実行されません。

あなたは今までにそれを理解したことを願っていますが、私はこれに時間を浪費している次の人のためにここに登録したかったです。

5
Suhaib Ahmed

これはかなり古いスレッドですが、問題はまだ同じです-

私は複数のことを試しましたが、どれも機能しませんでした-

  1. 開始パスを追加しました(引用符なし)
  2. Program/Scriptフィールドなどのバッチファイルの完全なパスを削除しました
  3. C:\Windows\system32\cmd.exeをプログラムに追加し、/c myscript.batを引数フィールドに追加しました。

これは私のために働いたものです-

プログラム/スクリプトフィールド-cmd

引数の追加-/ c myscript.bat

開始:myscript.batへのパス

5
smitraa

私は同じ問題を抱えていて、どのソリューションも機能しませんでした。履歴を確認すると、問題がわかりました。この警告がありました

Task Scheduler did not launch task "\TASK_NAME"  because instance "{34a206d4-7fce-3895-bfcd-2456f6ed6533}"  of the same task is already running.

[設定]タブには、[タスクが既に実行されている場合、次のルールが適用されます]のドロップダウンオプションがあり、デフォルトは[新しいインスタンスを開始しない]です。実際に行う必要があることに基づいて、「新しいインスタンスを並行して実行する」または「既存のインスタンスを停止する」ように変更します。

私はそれが古いスレッドであり、複数のソリューションがここで優れていることを知っています、これはちょうど私のために働いたものです。それが役に立てば幸い。

2
octafbr

Set 'Program/script'-> file.bat set 'Start in'残りのパス(file.bat)

2
widoz

同じ問題が発生した場合は、少なくとも「ユーザーがログオンしているときのみ実行する」にチェックを入れてください。これにより、batファイルが再び有効になります。

2
Gabo

アプリケーションが「タスクスケジューラ」を介して起動できませんでした。

「イベントビューア」のエラー:System.IO.DirectoryNotFoundException

「タスクスケジューラ」は、「SYSTEM」ユーザーでこのアプリケーションを実行しようとします。問題は、「ネットワークドライブ」が「SYSTEM」ユーザーにマップされていないことでした。そこで、アプリケーションを起動する前に、「。bat」ファイルを作成して「ネットワークドライブ」をマッピングしました。

Net Use T: \\172.20.2.215\images
cd C:\MyApplication
start MyApplication.exe

最初にログを確認してください:「イベントビューア」-> Windowsログ->アプリケーション

1
Tadej

解決策は、「ユーザーがログオンしている場合のみ実行する」オプションのチェックを外す(無効にする)ことです。

その変更の後、それは私のマシンで動き始めます。

1
Ljuba

以下のコードを試してください:

Batchfile.bat:

cd c:\batchfilepath
net stop "SQL Server Reporting Services (MSSQLSERVER)" 
timeout /t 10
net start "SQL Server Reporting Services (MSSQLSERVER)"
1
aditya garg

私にとって、問題はネットワークドライブにcdが含まれている.batが原因でした。これは失敗し、その後、そのネットワークドライブのプログラムへの呼び出しは何もしませんでした。

タスクのアクションの編集ウィンドウの引数の追加フィールドに> log.txtを追加することでこれを理解しました。

1
Gregorio

1つの解決策は、'。bat'ファイルを'。vbs'ファイルで実行し、このvbsファイルをwindows schedulerで実行できることです。

Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run("cron_jobs.bat"), 0, True

このようにして、問題が解決することを願っています。

1
sherin.k

私の問題はOneDriveが原因でした。 OneDriveは、バッチファイルが存在するフォルダーを同期していたため、タスクスケジューラがそれを実行できないようです。 (MSの誰もがこの種のものをテストしませんか?)

とにかく、バッチファイルをOneDriveにないフォルダーに移動することで、タスクスケジューラーでバッチファイルを開始できます。

0
Matthew

runasをサポートするWindowsシステム上。まず、次のように、そのユーザーとして実行されたコマンドラインからプログラムを起動して、プログラムを独立して実行します

runas /user:<domain\username> cmd

次に、その新しいコマンドラインで、cdを使用して、たとえばタスクランチャーがプログラムを起動し、完全な引数を入力する予定のパスに移動します。

cd D:\Scripts\、次に実行

C:\python27\pthon.exe script.py

タスクスケジューラによって抑制されているエラーは、コマンドライン出力に表示されるはずであり、デバッグが容易になります。

0
madballoonist

私にとってそれはトリガーの問題でした。デフォルトでは、トリガータブにOn a Scheduleが表示されます。 At log onを選択した後、タスクの実行を待っていました。ログオン時に名前が示すように、ログアウトしてログオンする必要があります。

スケジュールに入れて、1分ごとに起動してください。

enter image description here

0
shyammakwana.me