什么是系统相当于upstart“停止”和“开始”

时间:2017-09-12 09:14:46

标签: systemd upstart

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

start on started postgresql
stop on stopping postgresql

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

1 个答案:

答案 0 :(得分:0)

根据{{​​3}}

start onstart on started

  

6.33开始
  此节定义将导致作业自动启动的事件集。
  ......    6.33.2开始取决于其他服务
  start on started other-service

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

在systemd中:

[Unit]
Requires=postgresql
After=postgresql

因为根据upstart

  

After=,Before= ...如果一个单位foo.service包含一个设置Before = bar.service并且正在启动这两个单位,那么bar.service的启动是推迟到foo.service启动。 [...] After =是Before =的倒数,即After =确保在列出的单元完成启动后启动配置的单元,Before =确保相反,即配置的单元在列出的单元启动之前完全启动。   
... ...    Requires= 配置对其他单元的需求依赖性。如果激活此装置,则此处列出的装置也将被激活。如果其中一个单元无法激活,并且设置了故障单元的排序依赖性After =,则不会启动该单元。 [...] 如果一个单位foo.service需要一个单位bar.service配置为Requires =并且没有使用After =或Before =配置排序,则两个单元将同时启动如果foo.service被激活,它们之间的任何延迟。

根据systemd.unit man pagestop onstop on stopped

  

6.34停止
  此节定义了一组事件,这些事件将导致Job在运行时自动停止   ......    6.34.3依赖服务后停止
  stop on stopped other-service

上面提到的After=postgresql让您了解,因为根据upstart

  

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