我编写了一个使用Postgres数据库的程序,并为此编写了一个systemd服务文件。目前,我的服务可以在启动时正常启动,而在停止Postgres进行升级时,它会停止(通过apt upgrade
)。但是,当升级完成并再次启动Postgres时,我的服务不会自动启动。
我可以定义一些依赖项来自动重新启动我的服务吗?
这是我的服务在Postgres升级过程中自动停止后的状态:
● tabill.service - My service
Loaded: loaded (/srv/tabill/tabill.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Tue 2017-07-04 00:29:24 EEST; 44min ago
Main PID: 1048 (code=killed, signal=TERM)
请注意,我可以再次手动启动该服务。
这是我的服务文件:
[Unit]
Description=My service
Wants=nginx.service
Requires=postgresql.service
After=postgresql.service
[Service]
Type=simple
ExecStart=/srv/tabill/app/serve
Restart=always
TimeoutSec=60
[Install]
WantedBy=multi-user.target
我尝试添加 PartOf=postgresql.service
和BindsTo=postgresql.service
,然后手动停止和启动Postgres,但都没有帮助。
当然,我可以删除Requires
,但是最好将两个服务一起停止,前提是它们只能同时启动。
@meuh我现在尝试将其
—
Rennex
Requires=
删除,但没有帮助。我认为问题是PartOf=
链接“正在停止并重新启动单元”,但是Postgres 在升级期间没有重新启动。它已停止,升级和启动。
足够有趣的是,当您执行时
—
WGH
systemctl restart postgresql
,systemd会记住再次重新启动其相关服务。看起来容易,出于某种原因,确实的组合stop
和start
替代restart
。
PartOf=
听起来像是正确的解决方案。您是否尝试过将其Requires=
移除?