前提:该脚本自动扫描/tmp/ctn/ 目录下的文件,并获取文件名(文件名即容器名)。
#!/bin/bash
#sub thread
function a_sub
{
dist=$1
ping -c 1 $dist
if [ $? -eq 0 ]; then
echo "The ip $dist is used!"
else
echo "----------------------------------------" $dist
echo $dist > /tmp/canuseip
fi
}
function mk_tmp_fifo_file
{
tmp_fifofile="/tmp/tmp.fifo"
mkfifo $tmp_fifofile
exec 6<>$tmp_fifofile
rm $tmp_fifofile
}
function init_threads
{
thread=50
for ((i=0;i<$thread;i++));do
echo "$i"
done >&6
}
function start_thread
{
for ((i=200;i<233;i++));do
read -u6
{
a_sub 10.1.2.$i $i && {
tmp_tmp=tmp
} || {
echo "===="
}
echo >&6
}&
done
wait
exec 6>&-
}
function assign_ip
{
can_use_ip=`cat /tmp/canuseip|head -1`
rm -f /tmp/canuseip
if [ "$can_use_ip" != "" ];then
pipework jbr1 $1 $can_use_ip/24@10.1.2.1
echo "end, assign $can_use_ip to $1"
else
echo "no ip"
fi
}
read_dir(){
for file in `ls $1`
do
if [ -f $1"/"$file ];then
echo "begin " `date` " -- $file"
mk_tmp_fifo_file
init_threads
start_thread
rm -f $1"/"$file
echo "rm the $file."
assign_ip $file
fi
done
}
mkdir -p /tmp/ctn/
while [ 1 ]
do
read_dir /tmp/ctn/
sleep 1
done