Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在Linux shell脚本中,有没有一种方法可以在任何给定时间触发10个脚本?_Bash_Shell_Unix - Fatal编程技术网

Bash 在Linux shell脚本中,有没有一种方法可以在任何给定时间触发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

我需要一次触发10个shell脚本。我可能要执行200多个shell脚本

e、 g.如果我触发10个作业并完成两个作业,我需要触发另外2个作业,这将使当前执行的作业数量增加到10个


我需要您的帮助和建议来满足此要求。

只需将它们作为后台作业运行即可:

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)
  • 使用
    crontab
    (2)
  • 在处使用
    (3)
说明:

(1) 您可以在自己喜欢的时候启动进程(通过启动命令、单击按钮或选择任何事件)
(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