找到正确的 pid 来杀死 logrotate 的 -HUP

找到正确的 pid 来杀死 logrotate 的 -HUP

我正在学习 logrotate 配置。因此,我一直在阅读命令的手册页并查看特定应用程序日志的 logrotate 配置,我经常看到下面的 snipit。 (Centos 6.8及以下环境)

postrotate
   /bin/kill -HUP `cat /var/run/XXX.pid 2>/dev/null` 2> /dev/null || true
endscript

或者类似的东西。我的问题是,如果我需要的进程(顺便说一下,我在or或 中kill -HUP找不到)不在如何阻止该进程继续写入文件?我知道如何终止一个进程,但我只是想阻止它写入文件,或者让它重新读取文件描述符,就像上面的示例一样,或者至少我认为这就是它的作用。kill --helpman killman signal/var/run/xx.pid

答案1

/var/run知道要杀死什么 PID 是在其中(或在/run/user/$UID您自己的用户帐户管理的进程下)拥有 pid 文件的关键。如果您的进程不写入这样的文件,那么您应该将其配置为这样做(如果可能)或通过导师创建一个pid文件。

作为最后的手段,您可以检查哪些进程打开了日志文件fuser,或者甚至直接终止这些进程(如果这样做,请不要忘记该-w选项,仅终止正在写入文件的进程),例如

ps $(fuser /path/to/log/file 2>/dev/null)
fuser -w -k -HUP /path/to/log/file

相关内容