我正在将我的upstart
脚本翻译成systemd
个脚本,我想知道翻译以下内容的最佳做法是什么:
start on started postgresql
stop on stopping postgresql
Requires=
部分适合我,还是有更好的部分?
答案 0 :(得分:0)
start on
和start 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 page的stop on
和stop on stopped
:
6.34停止
此节定义了一组事件,这些事件将导致Job在运行时自动停止 ...... 6.34.3依赖服务后停止
stop on stopped other-service
上面提到的After=postgresql
让您了解,因为根据upstart:
After=,Before=
[...] 请注意,当关闭两个具有排序依赖关系的单位时,启动顺序的反转被申请;被应用。即如果一个单位在另一个单位上配置了After =,则如果两个单位都关闭,则前者在后者之前停止。