我有一个bash脚本应该在配置文件中的所有ID上运行同步任务oil r cron:sync $id
,因为我对bash很新,我想知道如何去做。
问题是,同步必须每10秒完成一次,它不应该等待同步,因此我在同步之间使用&
目前我有这个文件:
#!/bin/bash
cd /var/www/script/
i="0";
function dsync {
oil r cron:sync $1
}
while [ $i -lt 10 ]; do
echo ">> Syncing IDs - loop $i"
dsync 126776804 & dsync 108792704 & dsync 108291602
sleep 10
i=$[$i+1]
done
现在的问题是,如果我在每一行都有一个文件,那么必须同步的ID,我该怎么办呢?
答案 0 :(得分:1)
启动任务时的语法错误。要在后台启动它们,您需要将它们放在不同的行上:
dsync 126776804 &
dsync 108792704 &
dsync 108291602 &
您还在说it should not wait for a sync
。有了这个,我假设你不关心任务的返回状态,这个假设是否正确?
答案 1 :(得分:1)
我认为你想要的是:
#!/bin/bash
cd /var/www/script/
i="0";
function dsync {
oil r cron:sync $1
}
while [ $i -lt 10 ]; do
echo ">> Syncing IDs - loop $i"
for j in $(cat ids.txt); do
dsync $j &
done
sleep 10
i=$[$i+1]
done
答案 2 :(得分:1)
对于dsync
的并行调用的可变计数,您可以在表单中使用xargs
:
xargs -n1 -I% -P0 oil r cron:sync % < filename_with_IDs
管道示例
seq 100010 100015 | xargs -n1 -I% -P0 echo oil r cron:sync %
产生
oil r cron:sync 100011
oil r cron:sync 100010
oil r cron:sync 100012
oil r cron:sync 100013
oil r cron:sync 100014
oil r cron:sync 100015
(ofc,您需要删除echo
)
-P0
确保并行执行任意数量的参数(分叉到背景中)
来自男人:
-P max-procs
一次运行max-procs进程;默认值为1.如果max-procs为0,则xargs将运行多次 尽可能一次处理。将-n选项与-P一起使用;否则机会只有一个执行官 将会完成。