【问题标题】:What is systemd equivalent of upstart "on stopping" and "on started"什么是 systemd 等同于暴发户“停止时”和“启动时”
【发布时间】:2017-09-12 09:14:46
【问题描述】:

我正在将我的 upstart 脚本翻译成 systemd 脚本,我想知道翻译以下内容的最佳做法是什么:

start on started postgresql
stop on stopping postgresql

Requires= 部分适合我还是有更好的部分?

【问题讨论】:

  • Requires 不是 systemd 单位中的一个部分。它是一个依赖说明符,它指定单元 A 严格依赖于单元 B,如果单元 B 无法激活,单元 A 也会失败(严格依赖)。对upstart不熟悉,看systemd.unit(5)

标签: systemd upstart


【解决方案1】:

start onstart on started根据@​​987654321@:

6.33 开始
本节定义将导致作业自动启动的事件集。
...
6.33.2 启动依赖于另一个服务
start on started other-service

所以在你的情况下,start on started postgresql 意味着它需要在 postgresql 成功启动之后启动 ,因为它依赖于它。

在 systemd 中是:

[Unit]
Requires=postgresql
After=postgresql

因为根据systemd.unit man page

After=,Before= ... 如果一个单元 foo.service 包含一个设置 Before=bar.service 并且两个单元都正在启动,bar.service 的启动会延迟到 foo.service开始了。 [...] After= 是 Before= 的倒数,即 After= 确保配置的单元在列出的单元完成启动后启动,Before= 确保相反,即配置的单元在列出的单元启动之前完全启动。
...
Requires= 配置对其他单元的需求依赖。如果这个单位被激活,这里列出的单位也将被激活。如果其他单元之一未能激活,并且在失败单元上设置了顺序依赖 After=,则不会启动该单元。 [...] 如果单元 foo.service 需要使用 Requires= 配置的单元 bar.service 并且没有使用 After= 或 Before= 配置排序,则两个单元将同时启动且无需如果 foo.service 被激活,它们之间的任何延迟。


至于stop onstop on stopped根据upstart

6.34 停在
本节定义了一组事件,如果作业已经在运行,将导致作业自动停止。
...
6.34.3 依赖服务后停止
stop on stopped other-service

上面提到的After=postgresql 已经涵盖了,因为再次根据systemd.unit man page

After=,Before= [...] 请注意,当两个具有顺序依赖关系的单元关闭时,将应用与启动顺序相反的顺序.即,如果一个单元在另一个单元上配置了 After=,如果两者都关闭,则前者在后者之前停止。

【讨论】:

    猜你喜欢
    • 2018-12-31
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 2016-05-25
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    相关资源
    最近更新 更多