Bash 猛击。使用xargs kill-9进行while循环
我有一个IP地址列表,我必须为每个IP地址运行一个命令 我是用这个代码做的:Bash 猛击。使用xargs kill-9进行while循环,bash,while-loop,Bash,While Loop,我有一个IP地址列表,我必须为每个IP地址运行一个命令 我是用这个代码做的: array=($(</tmp/ip-addresses.txt)) for i in "${array[@]}"; do ./command start $i & done array=($(您的脚本将更改为: #!/bin/bash GAP=120 while : do #Do your stuff here sleep $GAP done exit 0 两分钟后,它将从刷新的文件中读取数据,
array=($(</tmp/ip-addresses.txt))
for i in "${array[@]}"; do
./command start $i &
done
array=($(您的脚本将更改为:
#!/bin/bash
GAP=120
while :
do
#Do your stuff here
sleep $GAP
done
exit 0
两分钟后,它将从刷新的文件中读取数据,这是一个简单的解决方法:(未测试)
让我重新措辞,看看我是否理解正确。您想要一个旧IP和新IP的数组,每两分钟,当前的新IP变为旧IP,并且将/tmp/…
文件重新读取到新IP中。然后,您想要删除旧IP中的命令而不是新IP,并运行新IP中的命令而不是旧IP?如果命令ly需要kill-9
这是一个bug,应该避免。看看是否可以用较小的信号终止它。我的理解是,如果下次,数组中包含一些以前也存在的IP,它不应该被杀死和重生,而应该保持活着。
sleep_delay=120 # 2 mins
while true; do
(
array=($(</tmp/ip-addresses.txt))
for i in "${array[@]}"; do
./command start $i &
done
sleep $(( sleep_delay + 2 )) # 2 can be any number >0
) & PPID=$!
sleep $sleep_delay
pkill -9 -p $PPID
done
declare -A pid_array
while true; do
array=($(</tmp/ip-addresses.txt))
for i in `printf "%s\n" ${!pid_array[@]} | grep -v -f <(printf "%s\n" ${array[@]})`; do
kill -9 ${pid_array[$i]} # please try to use better signal to kill, than SIGKILL
unset pid_array[$i]
done
for i in "${array[@]}"; do
if [ -z "${pid_array[$i]}" ]; then
./command start $i & pid_array[$i]=$!
fi
done
sleep 120
done