自重启服务不随systemd一起重启

自重启服务不随systemd一起重启

我有几种可以自动重新启动的不同服务(例如自动更新后)。不幸的是,当它们重新启动时,它们不会出现。我可以告诉我,因为service <service name> status告诉我它处于非活动状态,并且它没有与 一起列出ps。我相信一旦主要可执行文件终止,systemd 就会终止该服务。日志没有显示任何错误迹象。

该服务被定义为 systemd 服务,具有Type=simple或不具有PIDfile=.我喜欢保持这种方式,因为 systemd “拥有”进程(因此知道 PID),并且我不必首先创建可写文件夹/var/run/

当原始启动的进程死亡时,有什么方法可以告诉 systemd “重新扫描”新启动的进程吗?请注意,systemd 不应重新启动该服务,因此我在手册中找到的大多数与重新启动相关的选项都不适用。

操作系统:Ubuntu 15.04,systemd 219。

答案1

当原始可执行文件死亡时,有什么方法可以告诉 systemd “重新扫描”另一个可执行文件?

可执行文件不会消亡。进程死亡。把问题问对了,答案就出来了。有没有办法告诉systemd一个新的主服务进程并移交给它,以便旧的主服务进程可以安静地退出?就在这里。这是notify准备协议。

我自己从未尝试过,但在 systemd 模型中执行此操作的方法是让当前主进程生成运行新程序映像的替换服务,然后sd_notifysystemd 关于 new MAINPID,将主进程火炬移交给新程序一,然后退出。 (如果旧的主进程必须与新的主进程协商切换,事情会变得稍微复杂一些。)

正如我所说,我从未使用过此方法,而且我无法谈论这几年中的任何回归,但早在 2011 年,据报道人们就是这样解决这个特定问题的。

(当然,另一种设计不是具有自修改服务程序,而是具有单独的“更新”服务,这些服务在其程序正在升级的服务的执行上下文之外运行。)

答案2

不,那里没有。这是 systemd 强加的硬性限制,也是对流程工作方式预期的重大突破性改变。我真的希望我错了,只是我还没有发现。

FWIW,你不是一个人。到目前为止最好的建议是使用atcron或 systemd 计时器单位。我理解这对你来说是不是小小的安慰。

相关内容