【コピペOK】Linuxでコマンドを同時実行(並列実行)する手順

 

★悩み★
・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でコマンドやシェルスクリプトを同時実行(並列実行)する手順?」で悩んでいるあなたにこの記事が少しでも役に立てれば幸いです。

コメント