★悩み★
・Linuxであるコマンドを同時(並列)に実行することはできないのかな。
・Linuxであるシェルスクリプトを同時(並列)に実行できないのかな。
・そもそもLinuxで簡単にコマンドを同時(並列)に実行できるのかな。
こういった「悩み」に答えます。
★本記事の内容★
① Linuxであるコマンドを同時実行(並列実行)する手順をご紹介
② Linuxであるシェルスクリプトを同時実行(並列実行)する手順をご紹介
これからご紹介する「Linuxでコマンドを同時実行(並列実行)する手順」を実践したことで、Linuxのコマンドを簡単に5つ同時(並列)で実行できました。
記事の前半では「Linuxであるコマンドを同時実行(並列実行)する手順」を解説しつつ、記事の後半では「Linuxであるシェルスクリプトを同時実行(並列実行)する手順」を紹介します。
この記事を読み終えることで、「Linuxでコマンドやシェルスクリプトを簡単に同時実行(並列実行)できる」ようになります。
今回ご紹介する手順は、「curlコマンドを5多重で同時(並列)実行し、応答時間の性能値を採取したい」といった場面に使えます。
ちなみに、「parallelコマンドを用いた同時実行(並列実行)する手順」を知りたい方には、以下の記事がおすすめです。
Linuxであるコマンドを同時実行(並列実行)する手順
「Linuxであるコマンドを同時実行(並列実行)する手順」に関してご紹介します。
★Linuxであるコマンドを同時実行(並列実行)するまでの流れ★
手順1:Linuxであるコマンドを同時実行(並列実行)するコマンドを作成
手順2:作成したコマンドを実行しあるコマンドを同時実行(並列実行)
上記の流れで、Linuxであるコマンドを同時実行(並列実行)できます。
上記の各手順は、以下の環境で動作確認済みです。
動作確認済み環境:CentOS Linux release 7.8.2003 (Core)
以降で、上記「Linuxであるコマンドを同時実行(並列実行)するまでの流れ」の各手順に関してご説明します。
手順1:Linuxであるコマンドを同時実行(並列実行)するコマンドを作成
「手順1:Linuxであるコマンドを同時実行(並列実行)するコマンドを作成」に関してご説明します。
Linuxのxargsコマンドを利用することで、簡単にあるコマンド(例:date)を同時実行(並列実行)できます。
参照:xargsコマンドのリファレンス
以下のコマンドで、「あるコマンド」を同時実行(並列実行)できます。
seq 1 5 | xargs -I{} -P <同時実行数(多重度数)> <同時実行(並列実行)したいコマンド>
dateコマンドを5多重で同時実行(並列実行)したい場合、以下のコマンドとなります。
seq 1 5 | xargs -I{} -P 5 date
dateコマンドを10多重で同時実行(並列実行)したい場合、以下のコマンドとなります。
seq 1 10 | xargs -I{} -P 10 date
以上で、「手順1:Linuxであるコマンドを同時実行(並列実行)するコマンドを作成」は完了です。
手順2:作成したコマンドを実行しあるコマンドを同時実行(並列実行)
「手順2:作成したコマンドを実行しあるコマンドを同時実行(並列実行)」に関してご説明します。
手順1で作成した「dateコマンドを5多重で同時実行(並列実行)するコマンド」を実行してみましょう。
以下のコマンドを実行し、5多重でdateコマンドが同時実行(並列実行)されることを確認しましょう。
# seq 1 10 | xargs -I{} -P 5 date +%Y%m%d_%H%M%S_%3N
20210331_224215_153
20210331_224215_154
20210331_224215_155
20210331_224215_156
20210331_224215_157
20210331_224215_157
20210331_224215_158
20210331_224215_159
20210331_224215_160
20210331_224215_160
ちなみに、sleepコマンドを同時実行(並列実行)することで、同時実行(並列実行)の効果が分かりやすいです。
## sleep 1を5多重で同時実行(並列実行)した場合
# date
2021年 3月31日 水曜日 22時45分04秒 JST
# seq 1 10 | xargs -I{} -P 5 sleep 1
# date
2021年 3月31日 水曜日 22時45分06秒 JST
## sleep 1を2多重で同時実行(並列実行)した場合
# date
2021年 3月31日 水曜日 22時45分21秒 JST
# seq 1 10 | xargs -I{} -P 2 sleep 1
# date
2021年 3月31日 水曜日 22時45分26秒 JST
以上で、「手順2:作成したコマンドを実行しあるコマンドを同時実行(並列実行)」は完了です。
xargsの利用で、簡単にLinuxであるコマンドを同時実行(並列実行)できました。
Linuxであるシェルスクリプトを同時実行(並列実行)する手順
「Linuxであるシェルスクリプトを同時実行(並列実行)する手順」に関してご紹介します。
★Linuxであるシェルスクリプトを同時実行(並列実行)するまでの流れ★
手順1:同時実行(並列実行)したいシェルスクリプトを作成
手順2:Linuxでシェルスクリプトを同時実行(並列実行)するコマンドを作成
手順3:作成したコマンドを実行しシェルスクリプトを同時実行(並列実行)
上記の流れで、Linuxであるコマンドを同時実行(並列実行)できます。
上記の各手順は、以下の環境で動作確認済みです。
動作確認済み環境:CentOS Linux release 7.8.2003 (Core)
以降で、上記「Linuxであるシェルスクリプトを同時実行(並列実行)するまでの流れ」の各手順に関してご説明します。
手順1:同時実行(並列実行)したいシェルスクリプトを作成
「手順1:同時実行(並列実行)したいシェルスクリプトを作成」に関してご説明します。
xargsコマンドで同時実行(並列実行)したいシェルスクリプトを作成しましょう。
xargsコマンドで「同時実行(並列実行)したい」シェルスクリプトは、以下となります。
SLEEP_TIME=$1
start_date=`date +%Y%m%d_%H%M%S_%3N`
sleep ${SLEEP_TIME}
end_date=`date +%Y%m%d_%H%M%S_%3N`
echo "start[${start_date}] - end[${end_date}] - cmd[sleep ${SLEEP_TIME}]" >> /var/tmp/xargs.log
上記のシェルスクリプトを「process.sh」というファイル名で保存しましょう。
process.shは、sleepコマンド実行後、開始終了時刻をファイルに出力するシェルスクリプトです。
以上で、「手順1:同時実行(並列実行)したいシェルスクリプトを作成」は完了です。
手順2:Linuxでシェルスクリプトを同時実行(並列実行)するコマンドを作成
「手順2:Linuxでシェルスクリプトを同時実行(並列実行)するコマンドを作成」に関してご説明します。
xargsコマンドを利用することで、シェルスクリプトを同時実行(並列実行)できます。
以下のコマンドで、「手順1で作成したシェルスクリプト」を同時実行(並列実行)することができます。
seq 1 10 | xargs -I{} -P <同時実行数(多重度数)> sh process.sh {}
手順1で作成したシェルスクリプトを5多重で同時実行(並列実行)したい場合、以下のコマンドとなります。
seq 1 10 | xargs -I{} -P 5 sh process.sh {}
手順1で作成したシェルスクリプトを10多重で同時実行(並列実行)したい場合、以下のコマンドとなります。
seq 1 10 | xargs -I{} -P 10 sh process.sh {}
以上で、「手順2:Linuxでシェルスクリプトを同時実行(並列実行)するコマンドを作成」は完了です。
手順3:作成したコマンドを実行しシェルスクリプトを同時実行(並列実行)
「手順3:作成したコマンドを実行しシェルスクリプトを同時実行(並列実行)」に関してご説明します。
手順2で作成した「シェルスクリプトを5多重で同時実行(並列実行)」を実行してみましょう。
以下のコマンドを実行し、「手順2で作成したシェルスクリプト」が5多重で同時実行(並列実行)されることを確認しましょう。
# seq 1 10 | xargs -I{} -P 5 sh process.sh {}
# cat /var/tmp/xargs.log
start[20210401_191251_563] - end[20210401_191252_566] - cmd[sleep 1]
start[20210401_191251_565] - end[20210401_191253_568] - cmd[sleep 2]
start[20210401_191251_566] - end[20210401_191254_569] - cmd[sleep 3]
start[20210401_191251_567] - end[20210401_191255_571] - cmd[sleep 4]
start[20210401_191251_568] - end[20210401_191256_571] - cmd[sleep 5]
start[20210401_191252_568] - end[20210401_191258_577] - cmd[sleep 6]
start[20210401_191253_571] - end[20210401_191300_575] - cmd[sleep 7]
start[20210401_191254_571] - end[20210401_191302_575] - cmd[sleep 8]
start[20210401_191255_574] - end[20210401_191304_579] - cmd[sleep 9]
start[20210401_191256_575] - end[20210401_191306_588] - cmd[sleep 10]
以上で、「手順3:作成したコマンドを実行しシェルスクリプトを同時実行(並列実行)」は完了です。
xargsの利用で、簡単にLinuxでシェルスクリプトを同時実行(並列実行)できました。
【まとめ】Linuxでコマンドを同時実行(並列実行)する手順
今回の記事を通して、「Linuxでコマンドを同時実行(並列実行)する手順」をご紹介することで、以下の悩みを解消しました。
★悩み★
・Linuxであるコマンドを同時(並列)に実行することはできないのかな。
・Linuxであるシェルスクリプトを同時(並列)に実行できないのかな。
・そもそもLinuxで簡単にコマンドを同時(並列)に実行できるのかな。
「Linuxでコマンドやシェルスクリプトを同時実行(並列実行)する手順は?」で悩んでいるあなたにこの記事が少しでも役に立てれば幸いです。
コメント