在使用守护进程安装软件包时,他们经常在Debian上安装/升级时重新启动该服务。
我有一个守护进程,它有一些只能在运行时设置的选项,没有configuration。 如果Debian软件包在我的控制之下,我会更改init脚本,以便它包含一个函数来设置这些选项,并在(重新)启动服务之后调用它。
由于这个守护进程来自一个远程仓库,我不想build立我自己的deb,所以我需要一个解决scheme,不会改变包中的任何文件(以避免在通过dpkg / apt更新包时出现问题)。
那么,是否有可能在该服务重新启动后以干净的方式执行某些命令或脚本?
如果延迟几分钟是可以接受的,那么最简单的做法是创build一个cronjob,它运行一个脚本来检查守护进程是否仍在运行,如果仍然有相同的PID,并且PID已经改变,执行一些命令。
你需要将PID保存在某个地方(只要一个纯文本文件就足够了),这样脚本的下一个迭代就会知道旧的PID。 如果PID改变了,应该保存新的PID。
工具pgrep可以帮助您find一个名称的过程。
监控工具monit https://packages.debian.org/jessie/monit实际上也可以做到这一点。 它允许您监视守护进程或服务是否仍然运行,并据此采取行动。 它也会注意到PID的变化。 发生此类事件时,您可以自定义其行为。