Gsutil: Windowsバッチファイルでシーケンシャルgsutilを実行できません

作成日 2014年11月01日  ·  12コメント  ·  ソース: GoogleCloudPlatform/gsutil

gsutilを使用してWindowsのデータをバックアップしています。 そして私のバッチファイルは以下のようなものです:

gsutil cp -R a gs:// zelon-test /
gsutil cp -R b gs:// zelon-test /

ただし、最初のコマンド「gsutil cp -R a gs:// zelon-test /」のみが実行されます。 2番目のコマンドはまったく実行されません。

最も参考になるコメント

私は自分でこの問題に遭遇しました(データを定期的に転送するためにいくつかのgcloudコマンドを実行しています)。 バッチファイルでは、必ずgcloudまたはgsutilなどの前にcallを付けてください。

call gcloud compute copy-files foobarhost:/home/foobar/blah /my/local/folder --zone my-compute-zone
call gcloud compute copy-files foobarhost:/home/foobar/blah /my/local/folder --zone my-compute-zone
...etc...

callを使用すると、子バッチが終了するとすぐにバッチが終了しなくなります。 %ERRORLEVEL%を使用して、呼び出されたコマンドの結果を確認できます(GCPスクリプトはこれを適切に設定します)。 http://ss64.com/nt/call.htmlも参照して

全てのコメント12件

こんにちは-最初のコマンドは0以外の終了ステータスで終了しましたか? これにより、バッチファイルが中止されます。

私は以下のようにテストしました:

a.exe
エコー終了コードは%errorlevel%です
gsutil cp -R a gs:// zelon-test /
エコー終了コードは%errorlevel%です
gsutil cp -R b gs:// zelon-test /
エコー終了コードは%errorlevel%です

結果は次のとおりです。

C:\ Temp> test.bat

C:\ Temp> a.exe

C:\ Temp> echo終了コードは0です
終了コードは0です

C:\ Temp> gsutil cp -R a gs:// zelon-test /
file:// a \ find.txt [Content-Type = text / plain] ..をコピーしてい
gs://zelon-test/a/find.txtのアップロード:36 KB / 36 KB

C:\ Temp>

最初のechoコマンドが実行され、a.exeの戻り値が表示されます。 ただし、2番目のechoコマンド(最初のgsutilコマンドの後)は実行されません。 gsutilがWindowsのバッチプロセスを強制終了するようです。

Windows 7 Ultimate Service Pack 1で次のスクリプトを実行しようとしましたが、うまくいきました。

\ Python27 \ python.exe \ cygwin \ usrlocal \ bin \ gsutil \ gsutil cp c:\ try.bat gs:// my-bucket / 1
\ Python27 \ python.exe \ cygwin \ usrlocal \ bin \ gsutil \ gsutil cp c:\ try.bat gs:// my-bucket / 2


どのバージョンのWindowsを実行していますか?
上記と同様に、Pythonインタープリターとgsutilスクリプトへのフルパスを使用してgsutilを実行するようにコマンドを変更するとどうなりますか?

マイク

私はあなたのアドバイスでこの問題に対処しました。 ありがとうございました。

私はWindows8.1 Pro K(韓国語)を使用しており、デフォルトのPythonバージョンは2.7.664ビットです
そして、あなたが言ったように、私はフルパスでPythonを使おうとしました。 次に、次のようなエラーメッセージが表示されました。

gs://zelon-test/a.exeのアップロード:14 KB / 14 KB
エラー110816:48:44.817000 http_wrapper.py]応答がステータス401を返し、再試行しました
エラー110816:48:44.817000http_wrapper.py] URLへのリクエストを再試行していますhttps://www.googleapis.com/upload/XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXuploadType =例外HttpErrorアクセス​​後のマルチパート fields = generation%2Ccrc32c%2Cmd5Hash%2Csize&alt = json&key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&prettyPrint = True&upload
Type = multipart>:応答:<{'status': '401'、 'alternate-protocol': '443:quic、p = 0.01'、 'content-length': '238'、 'vary':
'Origin、Referer、X-Origin'、 'server': 'UploadServer( "Built on Oct 29 2014 16:52:36(1414626756)")'、 'date': 'Sat、08 N
ov 2014 07:48:45 GMT '、' content-type ':' application / json; charset = UTF-8 '、' www-authenticate ':' Bearer realm = "https:// acc
ounts.google.com/AuthSubRequest "'}>、コンテンツ<{
"エラー": {
「エラー」:[
{{
「ドメイン」:「グローバル」、
「理由」:「必須」、
"メッセージ": "ログインが必要です"、
"locationType": "header"、
「場所」:「承認」
}
]、
「コード」:401、
"メッセージ": "ログインが必要です"
}
}

そのため、「gcloud auth login」を使用しましたが、今のところtest.batを正しく使用できます。

「gsutil」のような短い形式では、まだそのtest.batを使用できません。 「C:\ Python27 \ python.exeE:\ Programs \ google-cloud-sdk \ platform \ gsutil \ gsutil.py」のようなフルパスでそのtest.batを使用できます

こんにちは-完全に指定されたパスがないと、gsutilをWindowsで動作させることができませんでした-そのため、Windowsでgsutilを使用することをお勧めします(https://cloud.google.comにあるさまざまなドキュメントの[Windows]タブを参照してください)。 / storage / docs / gsutil_install)。

文書化されているとおりに機能しているため、この問題をクローズします。 あなたが物事を動かすことができてうれしいです。

ありがとう。 これは私にも役立ちました。

私は自分でこの問題に遭遇しました(データを定期的に転送するためにいくつかのgcloudコマンドを実行しています)。 バッチファイルでは、必ずgcloudまたはgsutilなどの前にcallを付けてください。

call gcloud compute copy-files foobarhost:/home/foobar/blah /my/local/folder --zone my-compute-zone
call gcloud compute copy-files foobarhost:/home/foobar/blah /my/local/folder --zone my-compute-zone
...etc...

callを使用すると、子バッチが終了するとすぐにバッチが終了しなくなります。 %ERRORLEVEL%を使用して、呼び出されたコマンドの結果を確認できます(GCPスクリプトはこれを適切に設定します)。 http://ss64.com/nt/call.htmlも参照して

それが答えです! マーティありがとう!

「物事を修正する方法は常にあるようです。」 -マクガイバー

確かに、マーティに感謝します、私もそれについて知りませんでした。

同じ問題がありますが、フルパスを使用する場合は、次のパスを使用しています: "C:\ Python27 \ python.exe" "C:\ Program Files(x86)\ Google \ Cloud SDK \ google-cloud-sdk \ platformgsutilgsutil.py "cp%myfile.txt%gs://%myBucket%/%folder%/例外の取得:

ServiceException:401匿名の呼び出し元には、%myBucket%/%folder%/%myfile.txt%へのstorage.objects.createアクセス権がありません

これは、gsutilコマンドを使用すると発生しません。推奨事項はありますか?

同じ問題がありますが、フルパスを使用する場合は、次のパスを使用しています: "C:\ Python27 \ python.exe" "C:\ Program Files(x86)\ Google \ Cloud SDK \ google-cloud-sdk \ platformgsutilgsutil.py "cp%myfile.txt%gs://%myBucket%/%folder%/例外の取得:

ServiceException:401匿名の呼び出し元には、%myBucket%/%folder%/%myfile.txt%へのstorage.objects.createアクセス権がありません

これは、gsutilコマンドを使用すると発生しません。推奨事項はありますか?

アップデート:

呼び出しコマンドを使用して、元のバッチファイルプロセスの子として、すべての操作に対して新しいプロセスを作成する問題を回避することができます。 したがって、バッチファイル内のコマンドは次のようになります。

* cmd / c gsutil cp%file_1%gs://%bucket%/%folder%/を呼び出します*
* cmd / c gsutil cp%file_2%gs://%bucket%/%folder%/を呼び出します*

/ cを使用すると、元のバッチプロセスが他のサブプロセスを待機できるため、すべての操作が適切に表示されることに注意してください。

このページは役に立ちましたか?
0 / 5 - 0 評価