【问题标题】:systemd: delay the return of a service until the startup finishedsystemd:延迟服务的返回,直到启动完成
【发布时间】:2017-08-11 22:27:55
【问题描述】:

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

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

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

否则我最后的机会是使用我调用的 shell 脚本来包裹 catalina.sh 调用,以确保启动,但我更愿意只使用 systemd。

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

【问题讨论】:

标签: tomcat init systemd


【解决方案1】:

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

了解 sd_notify here

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-10-21
      • 2011-07-10
      • 1970-01-01
      • 2017-01-20
      • 2017-08-03
      • 1970-01-01
      • 2013-08-31
      • 2017-08-17
      • 1970-01-01
      相关资源
      最近更新 更多