当安装带有守护进程的软件包时,它们通常会在 Debian 上的安装/升级期间重新启动该服务。
我得到了一个守护进程,它有一些选项只能在运行时设置,而不是配置。如果 Debian 软件包在我的控制之下,我会更改 init-script,使其包含一个设置这些选项的函数,并在(重新)启动服务后调用它。
由于这个守护进程来自远程存储库,并且我不想构建自己的 deb,所以我需要一个不更改包中包含的任何文件的解决方案(以避免通过 dpkg/apt 更新包时出现问题)。
那么,是否有可能挂接到该进程来执行某些命令或脚本后以干净的方式重新启动该服务?
答案1
我知道这个问题已经很老了,但是我在搜索“debian package hook”时发现了错误的关键字列表。
也许真的有办法dpkg 的触发器:
dpkg 触发器是一种工具,它允许记录和汇总由一个包引起但另一个包感兴趣的事件,然后由感兴趣的包进行处理。
我知道它存在,但从未使用过它。
答案2
如果可以接受几分钟的延迟,那么最简单的事情就是创建一个 cronjob,运行一个脚本来检查守护进程是否仍在运行,以及它是否仍然具有相同的 PID,如果 PID 已更改,它将执行一些命令。
您需要将 PID 保存在某个地方(纯文本文件就足够了),以便脚本的下一次迭代能够知道旧的 PID。如果 PID 发生变化,则应该保存新的 PID。
工具程序包有助于通过名称查找进程。
监控工具 monithttps://packages.debian.org/jessie/monit实际上也可以做到这一点。它允许您监视守护进程或服务是否仍在运行并采取相应措施。它还会注意到 PID 的变化。当发生此类事件时,您可以自定义其行为。