一个服务(比如bar.service)依赖于另一个服务(比如foo.service),如下所示:
bar的服务文件:
[Unit]
After=foo.service
Requires=foo.service
...
如果foo.service被重新启动(无论是手动还是由于错误),如何使bar.service自动重新启动?
一个服务(比如bar.service)依赖于另一个服务(比如foo.service),如下所示:
bar的服务文件:
[Unit]
After=foo.service
Requires=foo.service
...
如果foo.service被重新启动(无论是手动还是由于错误),如何使bar.service自动重新启动?
PartOf
。[Unit]
After=foo.service
Requires=foo.service
PartOf=foo.service
从 systemd.unit
手册中:
PartOf=
配置与 Requires= 相似的依赖关系,但仅限于停止和重新启动单元。当 systemd 停止或重新启动此处所列出的单元时,该操作会传播到此单元。请注意,这是一种单向依赖关系 —— 对此单元的更改不会影响所列出的单元。
当systemd停止或重新启动此处列出的单元时,该操作会传播到此单元
。 - jdizzleBindsTo
正是我所需要的。在我的情况下,我希望我的服务只在postgresql
处于活动状态时才能够激活,并且BindsTo
的文档中说:“使用BindsTo=依赖类型和After=一起确保一个单元可能永远不会处于活动状态,除非还有一个特定的其他单元也处于活动状态(见下文)。” - Bernhard Schussek# foo.service
[Service]
ExecStartPost=/bin/systemctl try-restart bar.service
Restart=on-failure
RestartSec=30s
额外的Restart和RestartSec选项可确保foo.service在崩溃时自动重启,从而也重启bar.service。
第二个扩展是将相同的选项加入到bar.service中,并确保bar.service在foo.service之后启动:
# bar.service
[Unit]
After=foo.service
[Service]
Restart=on-failure
RestartSec=30s
如果发生崩溃,这将自动启动两个服务,并且当foo.service重新启动时(bar.service由于错误或手动触发而重新启动)也会重新启动。
[Unit]
Requires=postgresql.service
After=postgresql.service
BindsTo=postgresql.service
[Install]
中具有WantedBy=foo.service
指令。 - BrnVrn