gpt4 book ai didi

linux - 通过 shell 脚本运行多个后台进程

转载 作者:太空狗 更新时间:2023-10-29 11:04:44 25 4
gpt4 key购买 nike

我是 shell 脚本的新手,所以请原谅我缺乏知识。

我的目标是在后台运行两台服务器 server1server2,然后通过我的 shell 脚本运行 python 脚本 scriptRun

第一步:

  • 启动 server1(使其在后台运行)

  • 在此服务器上运行一些命令(自定义命令)

第二步:

  • 启动服务器 2

第三步:

  • 启动 server1 和 server2 后,运行我的 python 脚本并在终端上显示其输出

我的 shell 脚本如下所示:

echo "Launching server1"
java StartServer1.jar && (serverCommand1 && serverCommand2) &

echo "Launching server2"
java StartServer2.jar &&

echo "Running script"
python scriptRun.py

这个脚本根本不起作用。我尝试删除 serverCommand1 和 serverCommand2,这有效,但 python 脚本不等待 server2 启动。

终端还显示 server1 和 server2 的输出,而不是 python 脚本的输出。

我的问题是如何在后台运行多个进程并运行另一个依赖于先前进程的进程?

最佳答案

脚本中的 && 看起来有点困惑。备案:

  • 在后台运行的命令后加上一个&
  • && 用于在成功时链接多个命令,例如 cmd1 && cmd2 将执行 cmd1 并且只有成功退出时,它将执行 cmd2。这两个命令都将在前台运行,这里根本没有后台。

也许你想做这样的事情:

echo "Launching server1"
java StartServer1.jar >server1.log 2>server1.err
sleep 5 # give some time for the server to come up

serverCommand1
serverCommand2

echo "Launching server2"
java StartServer2.jar >server2.log 2>server2.err
sleep 5 # give some time for the server to come up

echo "Running script"
python scriptRun.py

实际上,与其休眠固定的时间,不如检测到服务器已准备就绪并对此作出 react 会更好。例如在日志中,可能有一条消息表明服务器已准备就绪,假设一条消息显示“READY”。然后你可以这样做:

echo "Launching server1"
java StartServer1.jar >server1.log 2>server1.err
while :; do sleep 5; grep -q READY server1.log && break; done

那是一个无限循环,在每次休眠中它会休眠 5 秒并检查日志是否包含文本“READY”。如果是,则结束循环。您可以想出适合您需要的变体。

关于linux - 通过 shell 脚本运行多个后台进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20368032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com