[Capistrano]単一サーバに対しシェルコマンドを並行して実行したい
2902 ワード
状況
- 踏み台サーバがあり、各個別サーバにはそこ経由でしか入れない
- MySQLサーバが4つある
- MySQLサーバ4つに対し、たとえば
mysqldump
したい - 逐次実行でもいいけどえらい時間がかかるな〜って思っている
- 踏み台サーバには、GNU parallel が入っていない……
parallel
というDSLがすでにある
これは、複数サーバに対し並行実行するので、単一サーバには向かない。
gemもいい感じのものが無さそうに見える。
こんなの書いた
def run_parallel(parallel_size)
threads = []
parallel_size.times do |i|
threads << Thread.new do
logger.info "starting concurrent task in #{parallel_size} threads"
logger.info "started - thread #{i}"
yield i
logger.info "finished - thread #{i}"
end
end
threads.each {|t| t.join }
end
Usage
run_parallel 4 do |i|
run 'sleep 120'
end
- ちゃんと4並行で
sleep
が走る! - 結果、120秒前後で全ジョブが終わるはず
TODO
Good name
Author And Source
この問題について([Capistrano]単一サーバに対しシェルコマンドを並行して実行したい), 我々は、より多くの情報をここで見つけました https://qiita.com/udzura/items/72d84cb170d1920414f7著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .