systemd:延迟服务的 return 直到启动完成

systemd: delay the return of a service until the startup finished

我有多个 tomcat 实例必须按顺序启动。在 After= 和 Requires= 的帮助下,这不是多个服务文件的真正问题。

我现在的问题是我需要在下一个 tomcat 启动之前启动里面的 webapp。

是否可以定义某种延迟以确保服务启动?我在文档中找不到任何内容。

否则,我最后的机会是使用 shell 脚本环绕 catalina.sh 调用,我调用该脚本来确保启动,但我更愿意仅使用 systemd 来完成。

另外,我不想修改代码基础,所以我不能添加sd_notify之类的东西。

如果 Systemd 必须等到进程 A 完成其操作(在您的情况下启动 webapp)并通知 systemd,以便 systemd 启动依赖于进程 A 的下一个进程 B,然后进程 A必须实施 sd_notify() 通知 systemd 进程 A 已启动,并继续启动相关应用程序。

了解 sd_notify here

除了 sd_notify() 之外,您还需要在 process-A 中添加 Type=notify in process-A.service 文件,以便 systemd 等待 sd_notify()。

在那种情况下,我不想修改软件和提供的软件脚本的任何内容。

我遇到的一个解决方案符合我的需要。 ExecStartPost 允许您 运行 测试或任何测试服务是否已启动,或者您只是将其用于睡眠等。它计入启动,systemd 等待返回,直到 ExecStartPost 也(成功)返回。