Bash 在Linux shell脚本中,有没有一种方法可以在任何给定时间触发10个脚本?
我需要一次触发10个shell脚本。我可能要执行200多个shell脚本 e、 g.如果我触发10个作业并完成两个作业,我需要触发另外2个作业,这将使当前执行的作业数量增加到10个Bash 在Linux shell脚本中,有没有一种方法可以在任何给定时间触发10个脚本?,bash,shell,unix,Bash,Shell,Unix,我需要一次触发10个shell脚本。我可能要执行200多个shell脚本 e、 g.如果我触发10个作业并完成两个作业,我需要触发另外2个作业,这将使当前执行的作业数量增加到10个 我需要您的帮助和建议来满足此要求。只需将它们作为后台作业运行即可: for i in {1..10}; { ./script.sh & } 如果正在运行的作业少于10个,则添加更多作业: while true; do pids=($(jobs -pr)) ((${#pids[@]}<1
我需要您的帮助和建议来满足此要求。只需将它们作为后台作业运行即可:
for i in {1..10}; { ./script.sh & }
如果正在运行的作业少于10个,则添加更多作业:
while true; do
pids=($(jobs -pr))
((${#pids[@]}<10)) && ./script.sh &
done &> /dev/null
为true时;做
pids=($(工作-公共关系))
(${#pids[@]}/dev/null
是,GNU并行如下:
parallel -j 10 < ListOfJobs.txt
或者。如果您的作业使用不连续的随机名称命名,但所有shell脚本都在一个目录中使用
.sh
后缀命名:
parallel -j 10 ::: *.sh
这里有一个非常好的概述。关于堆栈溢出有很多问题和答案。有不同的方法来处理此问题:
- 将它们作为后台任务一起启动(1)
- 并行启动它们(1)
- 使用
(2)crontab
- 在处使用
(3)
(2) 这些流程将在同一时间、每(工作)天定期启动。
(3) 您可以选择同时启动进程的时间。我使用下面的方法一次触发10个作业
max_jobs_trigger=10
while mapfile -t -n ${max_jobs_trigger} ary && ((${#ary[@]})); do
jobs_to_trigger=`printf '%s\n' "${ary[@]}"`
#Trigger script in background
done
我试过这一点,它工作。但是考虑到我有10个工作和2个工作完成,我需要触发2个更多的工作。我应该有10个作业在任何给定的时间点运行。@ AK:用GNU代码> XARGS:<代码>我在{1…200 };做回音“$i”;完成XARGS-P 10 - i {} BASH-C”//Script({Script){}。请参见:
man xargs
我认为OP是一种惯用法,意思是“所有并行”,而不是一天中某个时间的日程安排意义上的“墙上的时钟上的某个时间”。我可能错了-我以前去过;-)是我的回答,还是其他问题,解决了你的问题?如果是的话,请考虑接受它作为你的答案-点击空心蜱/支票旁边的选票计数。如果不是,请说什么不起作用,使我,或其他人,可以帮助您进一步。谢谢。
max_jobs_trigger=10
while mapfile -t -n ${max_jobs_trigger} ary && ((${#ary[@]})); do
jobs_to_trigger=`printf '%s\n' "${ary[@]}"`
#Trigger script in background
done