如何在第一个命令挂起时运行依赖于第一个命令完成的第二个命令

时间:2017-08-22 14:31:32

标签: bash shell process jobs

我有一种情况,图像我有一个第一个运行命令,它启动一个数据库服务器,在这个命令的最后,它将挂起并监听某个端口。我有第二个命令,它启动一些Web服务器从第一个命令连接到数据库。

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

A ; B

哪个不起作用,因为当A进入暂停状态时,b不执行,如果我输入ctrl + c,则B启动,但它不再有意义,因为A已经终止,因此没有数据库进程。

我试过了:

A && B

它既不起作用,B也不会执行,因为A不会退出成功。

我想过使用:

A & B

有时不起作用,因为当A被放入后台时,B会立即启动,所以有时候,B在A还没有完成时尝试连接到数据库端口,所以有' s还没有数据库进程。

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

3 个答案:

答案 0 :(得分:2)

有点宽泛,但我想它得到了重点

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

答案 1 :(得分:0)

我会用

A ; B

但是B需要询问A是否完全启动。如果是,继续实际执行B.如果没有睡一段时间再问一次。这个问题的一个糟糕的解决方案可能是存在某个文件。

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

答案 2 :(得分:0)

I thought of using:

A & B

在进程B中,你做了一个循环来检查A是否被暂停。

How to see if a process is suspended in unix

如果A暂停,则B“Main”开始。