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

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

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

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

Windows

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

バッチファイル

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

Q&A

解決済

4回答

1934閲覧

バッチファイルでの並列処理

satsukichan

総合スコア52

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

Windows

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

バッチファイル

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

0グッド

0クリップ

投稿2019/03/26 03:57

編集2019/03/26 06:51

バッチファイルで4台のサーバのGit pull origin masterを並列処理したい。

従来は件名の処理をシーケンシャルに処理しておりましたので1バッチですみました。
しかしながらこの方法ですと1台終わってから2台目となりますのでコミットの内容によっては非常に時間がかかります。
startコマンドなどを使って並列処理のバッチを作り処理自体は成功しましたがバッチ自体が5個(呼び出すバッチ1個、呼び出されるバッチ4個)となってしまいバッチが増えてしまい管理が手間になってしまいました。
何とか1バッチ内で並列処理を行う方法はないでしょうか?
callですとまたシーケンシャルになってしまうので何か良い方法あれば教えて頂きたいです。
よろしくお願いします。

●起動するバッチ

start~ start~ start~ start~

●実際に起動されるバッチ ※肝心な部分のみ載せています。

@echo off echo start time >> %LOG% 2>&1 echo %time% >> %LOG% 2>&1 rem 1号機 echo Server git pull >> %LOG% 2>&1 net use i: ユーザー名 マッピングしたいuncパス i: >> %LOG% 2>&1 git pull origin master >> %LOG% 2>&1 git log -p -1 >> %LOG% 2>&1 echo. >> %LOG% 2>&1 c: net use i: /delete /y > nul echo ------------------------------ >> %LOG% 2>&1 start notepad.exe %LOG% exit

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

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

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

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

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

otn

2019/03/26 06:47 編集

1.今のコードを書いてください。 2.> 何とか1バッチ内で というのが曖昧です。 3.> 管理が手間 具体的にどういう事でしょうか?
satsukichan

2019/03/26 06:51

失礼しました。コードを掲載しました。 バッチファイルが現状5個になるのを一つにしたいの意味となりました。
guest

回答4

0

ベストアンサー

まず4つ分のバッチファイルをひとつにまとめ、起動パラメーターを付加して自分自身をstartで呼び出したらいかがでしょうか?
パラメーターが1ならサーバー1
パラメーターが2ならサーバー2
・・・
のような感じで。
以下テキトーです。
間違ってたら適宜直してください。

BAT

1if %1==1 goto server1 2if %1==2 goto server2 3if %1==3 goto server3 4if %1==4 goto server4 5 6start hoge.bat 1 7start hoge.bat 2 8start hoge.bat 3 9start hoge.bat 4 10goto end 11 12:server1 13REM サーバー1の処理 14goto end 15 16:server2 17REM サーバー2の処理 18goto end 19 20:server3 21REM サーバー3の処理 22 23:server4 24REM サーバー4の処理 25goto end 26 27:end

投稿2019/03/26 04:43

ttyp03

総合スコア16998

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

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

moredeep

2019/03/26 04:59

引数は1~4ではなくパスなりの処理に必要な引数を渡し、ifのところは%1があるかないかだけ判断する、としたほうが個人的には綺麗に思えます! パスなりを引数で渡せば各サーバ用の処理を共通化できるというのが前提になってしまいますが。
ttyp03

2019/03/26 05:03

元のコードがわからんのでひとまずこうしてみましたが、共通化できるならそういう感じの方がすっきりしていいと思います。
satsukichan

2019/03/26 06:38

ありがとうございます。バッチの中にstartコマンドで起動している部分がありますがここが上手く認識されていないようです。(バッチが何もせず終了してしまいます) 手動で第1引数を指定するとそれぞれの中身が実行されます。 自分でも調べているのですがアドバイス頂けますと幸いです。
ttyp03

2019/03/26 06:59

引数1があるかないかチェックしないとダメなようでした。 最初に以下を追加 if "%~1"=="" goto allstart startコマンドの前に :allstart を追加してみてください。 あと:server3の処理にgoto endがなかったので追加お願いします。
satsukichan

2019/03/26 07:08

出来ました。ありがとうございますm(_ _)m
guest

0

起動されるバッチで、4つが異なる部分を引数(%1 %2 ・・・)にして、起動する側では、start バッチファイル 引数1 引数2などとすれば、起動されるバッチファイルは1つで済みます。

投稿2019/03/26 06:59

otn

総合スコア84538

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

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

otn

2019/03/26 07:00

あるいは、Git をインストールしたなら Bash もあると思うので、Bashスクリプトにすれば1ファイルで済みますね。
satsukichan

2019/03/26 07:08

こちらの方法も参考になりました。ありがとうございました。
guest

0

start コマンドを使うのはどうでしょうか?

例:

start git -C C:\myproject1 pull origin master start git -C C:\myproject2 pull origin master

投稿2019/03/26 04:07

編集2019/03/26 07:07
nskydiving

総合スコア6500

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

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

satsukichan

2019/03/26 04:28

それだと別バッチになりませんか?
nskydiving

2019/03/26 06:41

一つのバッチファイルに記述します。 回答欄に追記した例のようなイメージですが、これだと要求に合わないでしょうか?
satsukichan

2019/03/26 09:48

git -C というオプションは使ったことがないですがgit コマンドを実行するときのディレクトリを指定できるということでしょうか? であればこちらの方法でもできたかもしれません。
nskydiving

2019/03/26 11:21

はい、git の -C オプションはリポジトリのディレクトリを指定できます。
satsukichan

2019/03/27 00:03

これ知らなかったです。めちゃめちゃ参考になりました。 ありがとうございます。
guest

0

多分並列化してもネットワーク速度依存の処理なので高速化につながらないと思います。

投稿2019/03/26 04:16

yumetodo

総合スコア5850

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

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

satsukichan

2019/03/26 04:28

いえstartコマンドを使った方法だと速いです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問