当服务器上的特定二进制文件更新时,systemd可以重新启动服务吗?

问题描述 投票:0回答:1

在Ubuntu 18.04中,我有一个无人值守的升级程序,定期更新应用程序,其中包括一个安装二进制文件的第三方PPA。/usr/bin/some_app. 我的systemd单元文件通过以下方式运行该服务 ExecStart=/usr/bin/some_app. 我可以验证更新工作的时间表在 /var/log/apt/history.log.

然而,即使通过无人值守升级更新二进制文件,systemd也不会重新启动应用程序,我认为是因为 some_app 是通过一个与该PPA无关的自定义单元文件启动的。因此,从cli some_app --version 显示 v2.0.0 但systemd仍在运行 v1.0.0.

systemd是否有方法跟踪文件或检测文件中引用的二进制文件?ExecStart 磁盘上有变化,应该重启?對我來說,備份的方法是使用 RuntimeMaxSec= 但我希望能有更优雅的东西存在

ubuntu-18.04 systemd
1个回答
0
投票

你可以尝试在系统文件中添加一个 .path 单元(man systemd.path),观察是否有一个 close() 之后 write() 文件的更改,然后重启你的应用服务。未测试。

etcsystemdsystemmyappwatch.path

[Unit]
Description=watch for changed file
[Path]
PathChanged=/usr/bin/some_app
#Unit=myappwatch.service

等systemdsystemmyappwatch.service。

[Service]
ExecStart=/bin/systemctl restart myapp.service

你也许可以更换 systemctl restart 神乎其技 Conflicts=myapp 但我让你试验一下。你还需要启用 .path 单位照旧,并配以适当的 WantedBy=. 我不知道如果路径是一个符号链接会发生什么,所以也许你应该解决真正文件的路径,如果是这样的话。

© www.soinside.com 2019 - 2024. All rights reserved.