質問編集履歴

3 誤りに気づき修正

.zero

.zero score 14

2016/09/13 17:23  投稿

バッチ処理にてcopy,xcopyが不穏な動きを見せる
###前提・実現したいこと
Windows7にてファイルのバックアップをバッチ処理で行う。
バッチファイルは(fessのクロール処理に組み込んでいるため)Groovyからキックされる。
処理の流れはとしては、バッチが終わった後にfessのクロールが走る。
ファイルをコピーする際のコマンドはcopyでもxcopyでもそのほかでも可。
以下のバッチはファイルパスさえ環境に合わせてやれば動くのですが動作が不安定なため今回質問することにいたしました。
**※補足情報は必ずお読みください。解決したい内容が書かれています。**
**追記:**ソースコードと補足情報を更新しました 2016/09/13/ 17:22 現在
###該当のソースコード
```バッチスクリプト
rem @echo off
@echo off
rem 格納パス
set MYSQLPATH="C:\Program Files\MySQL\MySQL Server 5.6\bin"
rem 接続文字列とかを環境変数で登録しとく
rem DB情報
set MYSQLDATABASE=fess_db
set MYSQLUSER=root
set PGPASSWD=mysql@dmin01
rem ファイルパス
rem 環境によって変化するもの
set BATPATH=C:\batch\bat
set BACKUPPATH=C:\backup
set SOLRPATH=C:\fess\solr
rem 環境には左右されないもの
set LOGPATH=%BATPATH%\..\log
set ERRLOGPATH=%LOGPATH%\errlog
set CORE1PATH=%SOLRPATH%\core1\data
set CORE1SGPATH=%SOLRPATH%\core1-suggest\data
set SOLRBACKUPPATH1=%BACKUPPATH%\solr\core1
set SOLRBACKUPPATH2=%BACKUPPATH%\solr\core1-suggest
rem バックアップデータ作成
mkdir %LOGPATH% > NUL 2>&1
call :getTime
echo # %LOGTIME% # "バックアップバッチ処理 start" >> %LOGPATH%\%LOGDATE%_batch.log
rem バックアップ用のフォルダ作成
call :getTime
echo # %LOGTIME% # "フォルダ作成 start" >> %LOGPATH%\%LOGDATE%_batch.log
mkdir %BACKUPPATH%\MySQL > NUL 2>&1
mkdir %SOLRBACKUPPATH1% > NUL 2>&1
mkdir %SOLRBACKUPPATH2% > NUL 2>&1
call :getTime
echo # %LOGTIME% # "フォルダ作成 end" >> %LOGPATH%\%LOGDATE%_batch.log
rem MySQLのバックアップ
call :getTime
echo # %LOGTIME% # "mysqldump start" >> %LOGPATH%\%LOGDATE%_batch.log
cd %MYSQLPATH%
mysqldump -u %MYSQLUSER% -p%PGPASSWD% %MYSQLDATABASE% --single-transaction > %BACKUPPATH%\MySQL\%MYSQLDATABASE%.dump
if not %errorlevel%==0 type RET:%errorlevel% >> %ERRLOGPATH%\%LOGDATE%_mysqldump.elog
rem echo %LOGTIME% mysqldump-end >> %LOGPATH%\%LOGDATE%_batch.log
call :getTime
echo # %LOGTIME% # "mysqldump end" >> %LOGPATH%\%LOGDATE%_batch.log
rem Indexのバックアップ
call :getTime
echo # %LOGTIME% # "index1バックアップ start" >> %LOGPATH%\%LOGDATE%_batch.log
rem %path%\*.* %path%\*.* /Y
rem copy "%CORE1PATH%\index\*.*" %SOLRBACKUPPATH1%\index\*.* /Y
rem xcopy "%CORE1PATH%\index" %SOLRBACKUPPATH1%\index /i /y /c 2>&1> %LOGPATH%\%LOGDATE%_xcopy1.log
robocopy "%CORE1PATH%\index"\ %SOLRBACKUPPATH1%\index\ /COPYALL /R:3 /W:1
rem >> %LOGPATH%\%LOGDATE%_robocopy1.log
rem /NDL /UNILOG+:%LOGPATH%\%LOGDATE%_robocopy1.log
echo # %LOGTIME% # "index1バックアップ end" >> %LOGPATH%\%LOGDATE%_batch.log
echo # %LOGTIME% # "index2バックアップ start" >> %LOGPATH%\%LOGDATE%_batch.log
rem copy "%CORE1SGPATH%\index\*.*" %SOLRBACKUPPATH2%\index\*.* /Y
rem xcopy "%CORE1SGPATH%\index" %SOLRBACKUPPATH2%\index /i /y 2>&1> %LOGPATH%\%LOGDATE%_xcopy1.log
robocopy "%CORE1SGPATH%\index"\ %SOLRBACKUPPATH2%\index\ /COPYALL /R:3 /W:1
rem >> %LOGPATH%\%LOGDATE%_robocopy2.log
call :getTime
echo # %LOGTIME% # "index2バックアップ end" >> %LOGPATH%\%LOGDATE%_batch.log
rem バックアップデータ作成完了
call :getTime
echo # %LOGTIME% # "バックアップバッチ処理 end" >> %LOGPATH%\%LOGDATE%_batch.log
echo. >> %LOGPATH%\%LOGDATE%_batch.log
exit /b 0
rem 時間取得
:getTime
set TIME0=%time: =0%
set LOGTIME=%TIME0%
set LOGDATE=%date:~0,4%%date:~5,2%%date:~8,2%
exit /b
```
###補足情報(言語/FW/ツール等のバージョンなど)
OS:windows7 64bit
アプリケーション:fess
※以下のような不穏な動作があります。
①"xcopy"コマンドや"robocopy"コマンドを実行する際に結果を別ファイルリダイレクトするようにバッチを記載すると正常に処理が終了する
```コマンドスクリプト
rem 正常動作時のコマンド
xcopy "%CORE1PATH%\index" %SOLRBACKUPPATH1%\index /i /y /c 2>&1> %LOGPATH%\%LOGDATE%_xcopy1.log
rem 正常動作時のコマンド
robocopy "%CORE1PATH%\index"\ %SOLRBACKUPPATH1%\index\ /COPYALL /R:3 /W:1 >> %LOGPATH%\%LOGDATE%_robocopy1.log
```
②"xcopy"コマンドや"robocopy"コマンドを実行する際に結果を受け取らない(リダイレクトしない)場合は処理が途中で停止する。
```コマンドスクリプト
rem 動作が途中で止まるときのコマンド
xcopy "%CORE1PATH%\index" %SOLRBACKUPPATH1%\index /i /y /c
rem 動作が途中で止まるときのコマンド
robocopy "%CORE1PATH%\index"\ %SOLRBACKUPPATH1%\index\ /COPYALL /R:3 /W:1
```
以上です。
ご教授の程、よろしくお願いします。
  • Apache Solr

    18 questions

    Solrは、全文検索ライブラリである Luceneを用いたオープンソースの検索エンジンサーバです。Javaで記述されており、高い全文検索能力を持ちます。ドキュメントの登録には、XML/JSON/CSVなどを用い、ファセット検索機能も備わっています。

  • Groovy

    53 questions

    Groovyは、Java用のオブジェクト指向型プログラミング言語です。PythonやRuby、Perl、そしてSmalltalkに似た特徴を有する動的な言語です。

  • Windows 7

    493 questions

    Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

  • コピー

    154 questions

    元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

  • バッチファイル

    605 questions

    バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

2 現状に合わせて質問の内容を修正

.zero

.zero score 14

2016/09/13 17:22  投稿

バッチ処理にてcopy,xcopyが不穏な動きを見せる
###前提・実現したいこと
Windows7にてファイルのバックアップをバッチ処理で行う。
バッチファイルは(fessのクロール処理に組み込んでいるため)Groovyからキックされる。
処理の流れはとしては、バッチが終わった後にfessのクロールが走る。
ファイルをコピーする際のコマンドはcopyでもxcopyでもそのほかでも可。
以下のバッチはファイルパスさえ環境に合わせてやれば動くのですが動作が不安定なため今回質問することにいたしました。
**※補足情報は必ずお読みください。解決したい内容が書かれています。**
**追記:**ソースコードと補足情報を更新しました 2016/09/13/ 17:22 現在  
 
###該当のソースコード
```バッチスクリプト
rem @echo off
rem 格納パス
set MYSQLPATH="C:\Program Files\MySQL\MySQL Server 5.6\bin"
rem 接続文字列とかを環境変数で登録しとく
rem DB情報
set MYSQLDATABASE=fess_db
set MYSQLUSER=root
set PGPASSWD=mysql@dmin01
rem ファイルパス
rem 環境によって変化するもの
set BATPATH=C:\batch\bat
set BACKUPPATH=C:\backup
set SOLRPATH=C:\fess\solr
rem 環境には左右されないもの
set LOGPATH=%BATPATH%\..\log
set ERRLOGPATH=%LOGPATH%\errlog
set CORE1PATH=%SOLRPATH%\core1\data
set CORE1SGPATH=%SOLRPATH%\core1-suggest\data
set SOLRBACKUPPATH1=%BACKUPPATH%\solr\core1
set SOLRBACKUPPATH2=%BACKUPPATH%\solr\core1-suggest
rem バックアップデータ作成
mkdir %LOGPATH% > NUL 2>&1
call :getTime
echo # %LOGTIME% # バックアップバッチ処理 start >> %LOGPATH%\%LOGDATE%_batch.log
echo # %LOGTIME% # "バックアップバッチ処理 start" >> %LOGPATH%\%LOGDATE%_batch.log
rem バックアップ用のフォルダ作成
call :getTime
echo # %LOGTIME% # フォルダ作成 start >> %LOGPATH%\%LOGDATE%_batch.log
echo # %LOGTIME% # "フォルダ作成 start" >> %LOGPATH%\%LOGDATE%_batch.log
mkdir %BACKUPPATH%\MySQL > NUL 2>&1
mkdir %SOLRBACKUPPATH1% > NUL 2>&1
mkdir %SOLRBACKUPPATH2% > NUL 2>&1
call :getTime
echo # %LOGTIME% # フォルダ作成 end >> %LOGPATH%\%LOGDATE%_batch.log
echo # %LOGTIME% # "フォルダ作成 end" >> %LOGPATH%\%LOGDATE%_batch.log
rem MySQLのバックアップ
call :getTime
echo # %LOGTIME% # mysqldump start >> %LOGPATH%\%LOGDATE%_batch.log
echo # %LOGTIME% # "mysqldump start" >> %LOGPATH%\%LOGDATE%_batch.log
cd %MYSQLPATH%
mysqldump -u %MYSQLUSER% -p%PGPASSWD% %MYSQLDATABASE% --single-transaction > %BACKUPPATH%\MySQL\%MYSQLDATABASE%.dump
if not %errorlevel%==0 type RET:%errorlevel% >> %ERRLOGPATH%\%LOGDATE%_mysqldump.elog
rem echo %LOGTIME% mysqldump-end >> %LOGPATH%\%LOGDATE%_batch.log
call :getTime
echo # %LOGTIME% # mysqldump end >> %LOGPATH%\%LOGDATE%_batch.log
echo # %LOGTIME% # "mysqldump end" >> %LOGPATH%\%LOGDATE%_batch.log
rem Indexのバックアップ
call :getTime
echo # %LOGTIME% # indexバックアップ start >> %LOGPATH%\%LOGDATE%_batch.log
echo # %LOGTIME% # "index1バックアップ start" >> %LOGPATH%\%LOGDATE%_batch.log
rem %path%\*.* %path%\*.* /Y
rem copy "%CORE1PATH%\index\*.*" %SOLRBACKUPPATH1%\index\*.* /Y
rem xcopy "%CORE1PATH%\index" %SOLRBACKUPPATH1%\index /i /y /c 2>&1> %LOGPATH%\%LOGDATE%_xcopy1.log  
robocopy "%CORE1PATH%\index"\ %SOLRBACKUPPATH1%\index\ /COPYALL /R:3 /W:1  
rem >> %LOGPATH%\%LOGDATE%_robocopy1.log  
rem /NDL /UNILOG+:%LOGPATH%\%LOGDATE%_robocopy1.log  
echo # %LOGTIME% # "index1バックアップ end" >> %LOGPATH%\%LOGDATE%_batch.log  
echo # %LOGTIME% # "index2バックアップ start" >> %LOGPATH%\%LOGDATE%_batch.log  
rem copy "%CORE1SGPATH%\index\*.*" %SOLRBACKUPPATH2%\index\*.* /Y
xcopy "%CORE1PATH%\index" %SOLRBACKUPPATH1%\index /i /y
xcopy "%CORE1SGPATH%\index" %SOLRBACKUPPATH2%\index /i /y
rem xcopy "%CORE1SGPATH%\index" %SOLRBACKUPPATH2%\index /i /y 2>&1> %LOGPATH%\%LOGDATE%_xcopy1.log
robocopy "%CORE1SGPATH%\index"\ %SOLRBACKUPPATH2%\index\ /COPYALL /R:3 /W:1
rem >> %LOGPATH%\%LOGDATE%_robocopy2.log
call :getTime
echo # %LOGTIME% # indexバックアップ end >> %LOGPATH%\%LOGDATE%_batch.log
echo # %LOGTIME% # "index2バックアップ end" >> %LOGPATH%\%LOGDATE%_batch.log
rem バックアップデータ作成完了
call :getTime
echo # %LOGTIME% # バックアップバッチ処理 end >> %LOGPATH%\%LOGDATE%_batch.log
echo # %LOGTIME% # "バックアップバッチ処理 end" >> %LOGPATH%\%LOGDATE%_batch.log
echo. >> %LOGPATH%\%LOGDATE%_batch.log
exit /b 0  
rem 時間取得
:getTime
set TIME0=%time: =0%
set LOGTIME=%TIME0%
set LOGDATE=%date:~0,4%%date:~5,2%%date:~8,2%
exit /b
 
```
###補足情報(言語/FW/ツール等のバージョンなど)
OS:windows7 64bit
アプリケーション:fess
※以下のような不穏な動作があります。
①正常にバックアップを終了させるためにはバッチを呼ぶ際に以下のように呼び出し、バッチ内部ではxcopyを使用しなければいけない。
①"xcopy"コマンドや"robocopy"コマンドを実行する際に結果を別ファイルリダイレクトするようにバッチを記載すると正常に処理が終了する
```コマンドスクリプト
rem 呼び出し
backUp.bat >> backUp.log
rem 正常動作時のコマンド
xcopy "%CORE1PATH%\index" %SOLRBACKUPPATH1%\index /i /y /c 2>&1> %LOGPATH%\%LOGDATE%_xcopy1.log
rem 正常動作時のコマンド
robocopy "%CORE1PATH%\index"\ %SOLRBACKUPPATH1%\index\ /COPYALL /R:3 /W:1 >> %LOGPATH%\%LOGDATE%_robocopy1.log
```
②バッチを実行する際にバッチ呼び出しだけを行うと、バッチ内部ではxcopyを使用していても処理が正常に動かないxcopyコマンド開始前に動作が停止してしまう。
**追記:**(indexバックアップ startがログにかかれない)
②"xcopy"コマンドや"robocopy"コマンドを実行する際に結果を受け取らない(リダイレクトしない)場合は処理が途中で停止する。
```コマンドスクリプト
rem 呼び出し
backUp.bat
rem 動作が途中で止まるときのコマンド
xcopy "%CORE1PATH%\index" %SOLRBACKUPPATH1%\index /i /y /c
rem 動作が途中で止まるときのコマンド
robocopy "%CORE1PATH%\index"\ %SOLRBACKUPPATH1%\index\ /COPYALL /R:3 /W:1
```
③バッチ内部でcopyを使用し、①と同じ方法で呼び出すと以下のエラーが発生する。  
```バッチスクリプト  
プロセスはファイルにアクセスできません。別のプロセスがファイルの一部をロックしています。  
```  
**追記:**出来れば、②の呼び出しで出来るようにしたい。  
以上です。
ご教授の程、よろしくお願いします。
  • Apache Solr

    18 questions

    Solrは、全文検索ライブラリである Luceneを用いたオープンソースの検索エンジンサーバです。Javaで記述されており、高い全文検索能力を持ちます。ドキュメントの登録には、XML/JSON/CSVなどを用い、ファセット検索機能も備わっています。

  • Groovy

    53 questions

    Groovyは、Java用のオブジェクト指向型プログラミング言語です。PythonやRuby、Perl、そしてSmalltalkに似た特徴を有する動的な言語です。

  • Windows 7

    493 questions

    Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

  • コピー

    154 questions

    元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

  • バッチファイル

    605 questions

    バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

1 現象の説明に追記、回答を絞るためにやりたいことを明記

.zero

.zero score 14

2016/09/13 10:28  投稿

バッチ処理にてcopy,xcopyが不穏な動きを見せる
###前提・実現したいこと
Windows7にてファイルのバックアップをバッチ処理で行う。
バッチファイルは(fessのクロール処理に組み込んでいるため)Groovyからキックされる。
処理の流れはとしては、バッチが終わった後にfessのクロールが走る。
ファイルをコピーする際のコマンドはcopyでもxcopyでもそのほかでも可。
以下のバッチはファイルパスさえ環境に合わせてやれば動くのですが動作が不安定なため今回質問することにいたしました。
**※補足情報は必ずお読みください。解決したい内容が書かれています。**
###該当のソースコード
```バッチスクリプト
rem @echo off
rem 格納パス
set MYSQLPATH="C:\Program Files\MySQL\MySQL Server 5.6\bin"
rem 接続文字列とかを環境変数で登録しとく
rem DB情報
set MYSQLDATABASE=fess_db
set MYSQLUSER=root
set PGPASSWD=mysql@dmin01
rem ファイルパス
rem 環境によって変化するもの
set BATPATH=C:\batch\bat
set BACKUPPATH=C:\backup
set SOLRPATH=C:\fess\solr
rem 環境には左右されないもの
set LOGPATH=%BATPATH%\..\log
set ERRLOGPATH=%LOGPATH%\errlog
set CORE1PATH=%SOLRPATH%\core1\data
set CORE1SGPATH=%SOLRPATH%\core1-suggest\data
set SOLRBACKUPPATH1=%BACKUPPATH%\solr\core1
set SOLRBACKUPPATH2=%BACKUPPATH%\solr\core1-suggest
rem バックアップデータ作成
mkdir %LOGPATH% > NUL 2>&1
call :getTime
echo # %LOGTIME% # バックアップバッチ処理 start >> %LOGPATH%\%LOGDATE%_batch.log
rem バックアップ用のフォルダ作成
call :getTime
echo # %LOGTIME% # フォルダ作成 start >> %LOGPATH%\%LOGDATE%_batch.log
mkdir %BACKUPPATH%\MySQL > NUL 2>&1
mkdir %SOLRBACKUPPATH1% > NUL 2>&1
mkdir %SOLRBACKUPPATH2% > NUL 2>&1
call :getTime
echo # %LOGTIME% # フォルダ作成 end >> %LOGPATH%\%LOGDATE%_batch.log
rem MySQLのバックアップ
call :getTime
echo # %LOGTIME% # mysqldump start >> %LOGPATH%\%LOGDATE%_batch.log
cd %MYSQLPATH%
mysqldump -u %MYSQLUSER% -p%PGPASSWD% %MYSQLDATABASE% --single-transaction > %BACKUPPATH%\MySQL\%MYSQLDATABASE%.dump
if not %errorlevel%==0 type RET:%errorlevel% >> %ERRLOGPATH%\%LOGDATE%_mysqldump.elog
rem echo %LOGTIME% mysqldump-end >> %LOGPATH%\%LOGDATE%_batch.log
call :getTime
echo # %LOGTIME% # mysqldump end >> %LOGPATH%\%LOGDATE%_batch.log
rem Indexのバックアップ
call :getTime
echo # %LOGTIME% # indexバックアップ start >> %LOGPATH%\%LOGDATE%_batch.log
rem copy "%CORE1PATH%\index\*.*" %SOLRBACKUPPATH1%\index\*.* /Y
rem copy "%CORE1SGPATH%\index\*.*" %SOLRBACKUPPATH2%\index\*.* /Y
xcopy "%CORE1PATH%\index" %SOLRBACKUPPATH1%\index /i /y
xcopy "%CORE1SGPATH%\index" %SOLRBACKUPPATH2%\index /i /y
call :getTime
echo # %LOGTIME% # indexバックアップ end >> %LOGPATH%\%LOGDATE%_batch.log
rem バックアップデータ作成完了
call :getTime
echo # %LOGTIME% # バックアップバッチ処理 end >> %LOGPATH%\%LOGDATE%_batch.log
echo. >> %LOGPATH%\%LOGDATE%_batch.log
rem 時間取得
:getTime
set TIME0=%time: =0%
set LOGTIME=%TIME0%
set LOGDATE=%date:~0,4%%date:~5,2%%date:~8,2%
exit /b
```
###補足情報(言語/FW/ツール等のバージョンなど)
OS:windows7 64bit
アプリケーション:fess
※以下のような不穏な動作があります。
①正常にバックアップを終了させるためにはバッチを呼ぶ際に以下のように呼び出し、バッチ内部ではxcopyを使用しなければいけない。
```コマンドスクリプト
rem 呼び出し
backUp.bat >> backUp.log
```
②バッチを実行する際にバッチ呼び出しだけを行うと、バッチ内部ではxcopyを使用していても処理が正常に動かないxcopyコマンドで動作が停止してしまう。
②バッチを実行する際にバッチ呼び出しだけを行うと、バッチ内部ではxcopyを使用していても処理が正常に動かないxcopyコマンド開始前に動作が停止してしまう。
**追記:**(indexバックアップ startがログにかかれない)
```コマンドスクリプト
rem 呼び出し
backUp.bat
```
③バッチ内部でcopyを使用し、①と同じ方法で呼び出すと以下のエラーが発生する。
```バッチスクリプト
プロセスはファイルにアクセスできません。別のプロセスがファイルの一部をロックしています。
```
**追記:**出来れば、②の呼び出しで出来るようにしたい。
以上です。
ご教授の程、よろしくお願いします。
  • Apache Solr

    18 questions

    Solrは、全文検索ライブラリである Luceneを用いたオープンソースの検索エンジンサーバです。Javaで記述されており、高い全文検索能力を持ちます。ドキュメントの登録には、XML/JSON/CSVなどを用い、ファセット検索機能も備わっています。

  • Groovy

    53 questions

    Groovyは、Java用のオブジェクト指向型プログラミング言語です。PythonやRuby、Perl、そしてSmalltalkに似た特徴を有する動的な言語です。

  • Windows 7

    493 questions

    Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

  • コピー

    154 questions

    元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

  • バッチファイル

    605 questions

    バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る