web-dev-qa-db-ja.com

内部変更モニター/ MON:1オプションでWindows Robocopyを自動化

/ MON:1オプションは適切に機能し、変更のみが発生した場合にディレクトリスキャンを実行します。これは、robocpyがWindowsスケジューラーから10分ごとに実行される場合は実行できないことです。

実行する方法はありますか

robocopy  \\192.168.1.100\D$\RoboCopyTest \\192.168.1.200\D$\RoboCopyTest /FFT /Z /ETA /E /XA:H /R:0 /W:1 /XO /NP /NDL /NFL /MON:1

windowsの起動時に自動的にコマンドを実行し、コマンドが何らかの理由で停止した場合-コマンドを再起動して、Windowsイベントログにコマンドが何らかの理由で停止したことを通知します。/MON:nオプションを指定したrobocpyコマンドには、ファイルにN個の変更があった場合にのみ、それ自体を実行する無限ループがあります。

7
user34402

タスクスケジューラから実行するのではなく、このためのWindowsサービスを作成した方がよい場合があります。 Serviceフレームワークは、このstart-once-run-foreverのようなプログラムを中心に設計されており、停止が不明な場合にイベントを発生させるためのフックがあります。

ユーザー定義サービスの作成は非常に簡単です。 a rticleはWindows 2000用に設計されています ですが、2008でも機能します。「sc」コマンドを使用してサービスを作成します。

sc create "Robocopy-Service" binPath= "c:\tools\robocopy.exe" start= auto

サービスの実行方法に基づいて値を変更します。それができたら、サービスマネージャーに移動して、突然の停止を処理する方法についてサービスを変更できます。常にイベントが記録され(「Service xyzが予期せず停止しました」)、サービスを再起動する方法を通知したり、サービスに関するメールを送信する必要がある場合はスクリプトを実行したりできます。

6
sysadmin1138

上記の応答を拡張し、robocopyにパラメーターを提供するには:

sc create "Robocopy Service" binpath="c:\windows\system32\robocopy.exe /JOB:robocopy"

これにより、すべてのパラメーターを含むrobocopy.rcjファイルが読み取られます。

必要なすべてのパラメーターを指定してrobocopyコマンドを実行し、/ SAVE:robocopyコマンドを追加してrobocopy.rcjファイルを作成できます。その後、robocopy.rcjファイルを編集するだけでパラメーターを変更できます。

9
Jorge Henriquez