在另一项服务启动后执行一项服务

在另一项服务启动后执行一项服务

我已经安装了 MySQL NDB 集群。在集群节点之间同步数据库大约需要 2-3 分钟。同步完成后,我就可以启动另一个名为 heartbeat 的应用程序。因此,在我的 shell 脚本中,我想随时检查 ndbd 服务的可用性。一旦此服务可用,我需要在五分钟内启动 heartbeat 应用程序。你能帮我写一下脚本吗?

答案1

您也可以尝试使用“wait”bash内置命令。

来自“man bash”

等待 [n]

等待指定的进程并返回其终止状态。n 可以是进程 ID 或作业规范;如果给出了作业规范,则等待该作业管道中的所有进程。如果没有给出 n,则等待所有当前活动的子进程,返回状态为零。如果 n 指定不存在的进程或作业,则返回状态为 127。否则,返回状态是等待的最后一个进程或作业的退出状态。

你的脚本可能看起来像这样:

# send to background
./ndb_startup_script & 

# wait on pid of ndb_startup_script
wait $!

if [ $? -eq 0 ] # assuming 0 is ret code for successful run
then 
    ./heartbeat_startup_script
else 
    # extra stuff to handle error
fi

答案2

我想要的是让 ndb 脚本执行另一个脚本,这样它就不会等待 5 分钟完成并阻止其他服务启动。

## whatever starts ndb
exec heartbeat_startup_script

我在这里设置了睡眠 300(秒),因为你指定了 5 分钟,但检查 ndb 同步是否完成会更好。

##heartbeat_startup_script
sleep 300
heartbeat

相关内容