Kill

找到合適的 pid 來殺死 -HUP 以進行 logrotate

  • August 6, 2018

我正在學習 logrotate 配置。所以我一直在閱讀命令的手冊頁並查看特定應用程序日誌的 logrotate 配置,我經常看到下面的程式碼片段。(Centos 6.8 及以下環境)

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

或類似的東西。我的問題是,如果我需要的過程(順便說一下我在or或kill -HUP中找不到)不在我如何阻止該過程仍然寫入文件?我知道如何殺死一個程序,但我只想阻止它寫入文件,或者讓它重新讀取文件描述符,就像上面的例子一樣,或者至少我認為它就是這樣做的。kill --help``man kill``man signal``/var/run/xx.pid

知道要殺死什麼 PID 是在/var/run(或在/run/user/$UID由您自己的使用者帳戶管理的程序下)有一個 pidfile 的關鍵。如果您的程序沒有寫入這樣的文件,那麼您應該將其配置為這樣做(如果可能)或通過創建 pidfile的主管執行它。

作為最後的手段,您可以檢查哪些程序打開了日誌文件fuser,甚至直接殺死這些程序(如果這樣做,不要忘記該-w選項,只殺死正在寫入文件的程序),例如

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

引用自:https://unix.stackexchange.com/questions/333213