質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

2回答

28446閲覧

windowsのrobocopyコマンドでプロセス使用中のエラーが出てしまう

Kazuaki_Igarash

総合スコア16

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

1クリップ

投稿2017/05/22 07:56

windowsのrobocopyコマンドを使い、
サーバー間のファイルコピーを行っています。
処理はローカルサーバー上にバックアップを取った上で、別サーバーにコピーしています。

サーバー起動後は問題なく動くのですが、
何かをきっかけに正常に動作しなくなります。

robocopyのログには「別のプロセスが使用中」とのエラーが出て、
0バイトの空ファイルがコピー(上書き)されてしまいます。

コピー元のサーバー上では対象ファイルを開いたりもしておらず、
ファイル名を変えたり削除もできるので別のプロセスが使用中とは考えられないため、
このバッチ処理の中で別のプロセスがファイルを掴んでしまっているのではないかと考えています。

こちらどうすれば解消できるかご教示いただきたいです。

Windows

1@echo off 2echo ファイルを転送します。 3 4rem アップロードするフォルダ DATADIR 5rem robocopy コピー元 コピー先 /MIRなどのオプション 6 7rem ---------------変数一覧--------------- 8rem バックアップ用フォルダ パラメーター1 9set DEVBACKUP=%1 10rem 対象サイト パラメーター2 11set SITE=%2 12rem 転送するファイルをまとめて以下のフォルダに置く パラメーター3 13set DATADIR=%3 14rem サーバー情報 パラメーター4 15set SERVERINFO=%4 16rem 環境情報 パラメーター5 17set SERVERENV=%5 18rem -------------変数ここまで------------- 19 20if not exist %DEVBACKUP% (mkdir %DEVBACKUP%) 21 22rem previousディレクトリが存在したら削除する。previousディレクトリを新規作成 23if exist %DEVBACKUP%\previous (rmdir /S /Q %DEVBACKUP%\previous) 24mkdir %DEVBACKUP%\previous 25 26rem currentディレクトリが存在したら、currentディレクトリの中身をpreviousディレクトリに移動する 27if exist %DEVBACKUP%\current (robocopy %DEVBACKUP%\current %DEVBACKUP%\previous\ /MIR /R:0 /W:0 /NP /XJD /XJF) 28 29rem currentディレクトリが存在したら削除する。currentディレクトリを新規作成 30if exist %DEVBACKUP%\current (rmdir /S /Q %DEVBACKUP%\current) 31mkdir %DEVBACKUP%\current 32 33rem コピー元のフォルダをcurrent直下のフォルダとしてコピーする(日付ディレクトリは作らない) 34robocopy %DATADIR% %DEVBACKUP%\current\ /MIR /R:0 /W:0 /NP /XJD /XJF 35echo バックアップ作成完了しました 36 37 38echo %SERVERENV%サーバーにファイルをコピーします 39rem 対象サーバーにアップローダーサーバーからファイルを転送する 40for /F "usebackq tokens=1,2,3" %%1 in (%SERVERINFO%) do ( 41 net use %%1\%SITE% /user:%%2 %%3 42 robocopy %DATADIR% %%1\%SITE%\ /COPY:DT /MIR /R:0 /W:0 /NP /XJD /XJF 43)

robocopyのログは以下の通りです

------------------------------------------------------------------------------- ROBOCOPY :: Windows の堅牢性の高いファイル コピー ------------------------------------------------------------------------------- 開始: 2017年5月22日 13:43:53 コピー元 : D:\xxxxxx\ コピー先 : \\192.168.xx.xxx\D$\yyyyyyy\ ファイル: *.* オプション: *.* /S /E /DCOPY:D /COPY:DT /PURGE /MIR /NP /XJF /XJD /R:0 /W:0 ------------------------------------------------------------------------------ 1 D:\xxxxxx\ 新しい 18 test.txt 2017/05/22 13:43:53 エラー 32 (0x00000020) ファイルをコピーしています D:\xxxxxx\test.txt プロセスはファイルにアクセスできません。別のプロセスが使用中です。 ------------------------------------------------------------------------------ 合計 コピー済み スキップ 不一致 失敗 Extras ディレクトリ: 1 0 0 0 0 0 ファイル: 1 0 0 0 1 0 バイト: 18 0 0 0 18 0 時刻: 0:00:00 0:00:00 0:00:00 0:00:00 終了: 2017年5月22日 13:43:53

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

まさかとは思いますが、私の経験では以前遭遇したことがあるので。。

おそらくタスクスケジューラなどで実行されていると思うのですが、処理に時間がかかったために一周回って2回目が重複で起動してしまい、最初のバッチでファイルを掴んだままになっているということはないでしょうか。
なお、その場合はタスクスケジューラ設定の「タスクが既に実行中の場合に適用される規則」で対策が可能と思います。

そうでない場合は・・・ある程度ログを出力して追っていくくらいしか思いつかないですね、すみません。

投稿2017/05/22 09:25

caf2for4

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kazuaki_Igarash

2017/05/22 09:56

ありがとうございます。 タスクスケジューラは使っておらず、Webの管理画面(PHP)から同期ボタン押下でスクリプトが叩かれるようになっているので、重複起動はないと考えています。
guest

0

ベストアンサー

作業されているマシンにセキュリティソフトはインストールされていますか?
リアルタイムスキャンが走って掴まれてしまうケースもあると思います
可能であればセキュリティソフトを一度停止して試してみてはいかがでしょうか
的外れでしたら、可能性のひとつを消したということで、、、

投稿2017/05/22 09:14

takito

総合スコア3111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kazuaki_Igarash

2017/05/22 10:14

ありがとうございます。 ただセキュリティソフトは使っていないので違いそうです。 ちなみに一度発生すると、何度実行してもずっと起こるようになってしまいます。
takito

2017/05/23 00:22

そうでしたか、、、あとは地道に誰がロックしているかを調べた方が早いかもですね コマンドプロンプト > tasklist /V | findstr ロックしているファイル名
Kazuaki_Igarash

2017/05/23 07:53

ありがとうございます。 tasklist /V | findstr をループさせて、robocopy処理の実行中に対象ファイルを掴んでいるプロセスを特定しようと思って実施してみましたが、取れませんでした。(何も引っかかりませんでした) ファイルを直接メモ帳などで開くと引っかかるのでtasklist自体は問題なさそうです。 送信元、送信先それぞれで実施しましたがどちらも同じ結果でした。 何が起きているのか全く理解できない状態です、、。
takito

2017/05/23 09:36

そういえば net use で接続した後始末は何かしてますか? コピー失敗とは関係ないかもしれませんが、念のため
Kazuaki_Igarash

2017/05/23 23:56

/delete での切断処理は入れていません。追加してみます。
Kazuaki_Igarash

2017/05/24 09:13

/delete での切断処理はまだ入れていないのですが、 robocopy のオプションの /R:0 /W:0 を /R:1 /W:1 にしたら正常に動くようになりました。 ただその後に/R:0 /W:0に戻したら、それでも正常に動くので別の原因かもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問