Bash 当第一个命令将挂起时,如何运行第二个命令,这取决于第一个命令的完成情况

Bash 当第一个命令将挂起时,如何运行第二个命令,这取决于第一个命令的完成情况,bash,shell,process,jobs,Bash,Shell,Process,Jobs,我有一个情况,映像我有一个启动db服务器的第一个命令要运行,在这个命令结束时,它将挂起并在某个端口上侦听。我有第二个命令,从第一个命令开始启动一些web服务器连接到数据库 现在我不知道如何编写这个简单的命令,尝试了: A ; B 这不起作用,因为当A进入挂起状态时,b不会执行,如果我键入ctrl+c,b就会启动,但这不再有意义,因为A已经终止,所以没有数据库进程 我试过: A && B 它也不工作,B不执行,因为A没有成功退出 我想用: A & B 这有时不起作用,

我有一个情况,映像我有一个启动db服务器的第一个命令要运行,在这个命令结束时,它将挂起并在某个端口上侦听。我有第二个命令,从第一个命令开始启动一些web服务器连接到数据库

现在我不知道如何编写这个简单的命令,尝试了:

A ; B
这不起作用,因为当A进入挂起状态时,b不会执行,如果我键入ctrl+c,b就会启动,但这不再有意义,因为A已经终止,所以没有数据库进程

我试过:

A && B
它也不工作,B不执行,因为A没有成功退出

我想用:

A & B
这有时不起作用,因为当A被放到后台时,B会立即启动,所以有时候,B试图连接到数据库端口,而A还没有完成,所以还没有数据库进程

我如何才能实现B仅在A成功启动数据库时启动?

我将使用

A ; B
但是B需要询问A它是否已经完全启动。如果是,继续实际执行B。如果不睡觉,再问一次。穷人对此问题的解决方案可能是存在某个文件

我不会使用anubhava的解决方案,因为如果睡眠时间太短,可能会导致不稳定

I thought of using:

A & B
然后,在进程B上放置一个循环来检查a是否挂起


如果A被挂起,B“Main”就会启动。

有点宽泛,但我想它会让人明白这一点

A&
while [ some_test_fails ]; do
    sleep some_time
done
B

设置一些合理的延迟,例如
A&sleep 20;B
@anubhava,这是唯一的解决方案吗?延迟不可能是精确的,有时仍然会失败。一个可靠的解决方案是在后台运行脚本
A
。继续使用脚本轮询数据库状态,并且仅当数据库服务器正在运行时,启动脚本
B
@aarons。然后,您可以尝试计算平均时间,并在上面运行,或者修改运行命令a或B的方式。我的意思是,如果命令a未结束,然后可能在后台启动它并休眠,直到您可以检索到OK状态以继续执行命令B