ShellScript 内で並列処理をする方法を調べたのでメモ
以下の例は、複数IPアドレスへのPingを並列処理している
exec_ping()
はPingを実施する関数(Pingが成功する迄3回実施している)
seq -f "192.168.100.%g" 1 10
は対象IPアドレス(192.168.100.1 ~ 10)
#!/bin/bash
exec_ping(){
IP_ADDR=$1
ping -c 1 $IP_ADDR > /dev/null 2>&1 || sleep 1 ; \
ping -c 1 $IP_ADDR > /dev/null 2>&1 || sleep 1 ; \
ping -c 1 $IP_ADDR > /dev/null 2>&1
echo $IP_ADDR $?
}
export -f exec_ping
seq -f "192.168.100.%g" 1 10 | xargs -n 1 -P 10 -I % bash -c "exec_ping %"
xargs -n 1 -P 10 -I % bash -c "exec_ping %"
部分で exec_ping()
を10プロセス同時実行
環境に合わせて exec_ping()
部分を変更することで上手く動作するはず