Linux 正在等待bash脚本作业完成,然后再启动另一个脚本作业

Linux 正在等待bash脚本作业完成,然后再启动另一个脚本作业,linux,bash,queue,wait,Linux,Bash,Queue,Wait,我有一种感觉,这不会像我希望的那样简单 我理解在bash脚本中使用&然后使用等待的概念,但这是否可以应用于在第一个进程尚未完成时多次运行的同一个脚本 我会尽力更好地解释我的意思 假设我有这个脚本: #/!/bin/bash COMPLETE="download complete" wget /root/downloads/ http://linktoareallymassivefile.wav & wait; echo $COMPLETE 现在忘记了这样一个事实:运行这个实际脚本只会

我有一种感觉,这不会像我希望的那样简单

我理解在bash脚本中使用&然后使用等待的概念,但这是否可以应用于在第一个进程尚未完成时多次运行的同一个脚本

我会尽力更好地解释我的意思

假设我有这个脚本:

#/!/bin/bash

COMPLETE="download complete"
wget /root/downloads/ http://linktoareallymassivefile.wav &
wait;
echo $COMPLETE
现在忘记了这样一个事实:运行这个实际脚本只会暂时覆盖以前下载的文件

我执行它,它开始下载,然后我再次执行它,但我希望第一个过程在第二个过程开始之前完成

那么,您喜欢这项工作吗

 #/!/bin/bash

wait;
COMPLETE="download complete"
wget /root/downloads/ http://linktoareallymassivefile.wav &
wait;
echo $COMPLETE &
我很怀疑这会发生,但我想你能明白我的要求


或者,正如我所担心的,在这种情况下是否需要更复杂的基于队列的解决方案?

如果您不使用
&
将进程推到后台,并删除
等待
,则执行
wget
只需花费尽可能长的时间。

每次运行脚本时,都会启动一个新进程。 每个过程都独立于其他过程<代码>等待不会影响任何其他脚本

因此,要么修改脚本以合并所有命令:

wget /root/downloads/ http://linktoareallymassivefile1.wav
wget /root/downloads/ http://linktoareallymassivefile2.wav
或者创建一个新脚本来调用原始脚本:

script.py
script.py

如果您不使用
&
,那么在第一个命令完成之前,下一个命令将不会执行。

我猜您的2次下载示例将扩展到N个并行脚本,它们彼此等待运行?如果不是,并且只有2个(或一个已知的数字),您可以使用锁文件,但这正接近您可怕的(理所当然的)“基于队列的解决方案”。与下面的一个解决方案相关,您是否可以编写一个脚本来动态创建一个脚本(读取要从中下载的文件列表??),其中每次下载只调用wget(无
&
)?祝你好运。在后台处理作业后立即调用
wait
相当于在前台运行作业。@Shelleter不容易,因为脚本运行所需的变量来自使用SSH2的外部PHP脚本。事实证明,这比我最初希望的要复杂得多。我可以看到编写主脚本然后触发流程脚本的逻辑,但是如何在不启动整个新流程的情况下不断向主脚本添加任务队列?我想这可能超出了我的能力,所以我想你是在问“在主脚本已经运行时,如何将新文件附加到主脚本的末尾”?但你的反对“没有开始一个全新的过程”(在99%的情况下)不是问题。每次启动
wget
时,您都在启动一个新流程。它将为写入新文件消耗新的磁盘空间和网络带宽。CPU对您的问题的重要性很低。所以我认为你自己做这件事太难了。或者考虑2个过程,一个唯一的责任就是把一个唯一编号的文件放到队列目录中。该文件中是要下载的文件的URL。在第二个脚本中,您将其读入一个var,执行
wget选择$URL\u到\u文件。完成后,删除编号的文件。然后取下一个,根据需要重复。这都在
while
循环中。您可以测试空目录和睡眠60,然后重试。正如我的shell讲师常说的,“20分钟”:-。如果这样做有意义,请将您对此解决方案的最佳尝试作为新问题发布,并寻求帮助。祝你好运。我不能合并它们,因为实际的脚本是通过PHP/SSH2获取动态变量的,它需要依赖PHP/SSH2才能执行任何操作。有没有一种排队系统可以在工作人员进来排队时处理他们?问题是我在脚本中运行的进程占用大量CPU,我只希望它一次运行此脚本的一个实例。然后使用第二个选项:创建一个新脚本以多次调用原始脚本。啊,我想我明白你的意思了,所以请捕获新脚本中的所有参数,将它们发送到原始脚本并在新脚本中对进程进行排队?过程1等待;过程2等待;等等?是的,除非您不需要
&
等待
。如果只调用脚本而不调用
&
wait
,则每个调用都将在前台运行,新脚本中的后续行将在完成后才会运行。