GP9*_*P92 4 logrotate signals rsyslog syslog sighup
我看到 syslog 日志记录,使用了 kill -HUP。
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
Run Code Online (Sandbox Code Playgroud)
我知道使用 -HUP 是因为像 syslog 这样的守护进程在捕获 SIGHUP 时会尝试重新启动,因此所有打开的文件都将被刷新。
我不明白为什么他们需要刷新。
如果 syslog 仅将新日志附加到日志文件,则打开的文件将处于写入模式。如果是这种情况,当发生日志切换并且在文件系统中的旧日志文件条目被删除时,它是否会在需要附加新日志行时自动创建一个新文件(毕竟 syslog服务以 root 身份运行)?
我认为差异更多在于对 w 和 u 模式的理解。我无法快速得出结论。
另外,为什么只使用kill -HUP,为什么不重新启动服务。会有什么不同吗?
小智 9
通常,服务会在运行时保持日志文件处于打开状态。这意味着他们不关心日志文件是否被重命名/移动或删除,他们将继续写入已处理的打开文件。
当 logrotate 移动文件时,服务会继续写入同一个文件。
示例:crond 将写入 /var/log/cron.log。然后 logrotate 将文件重命名为 /var/log/cron.log.1,因此 crond 将继续写入打开的文件 /var/log/cron.log.1。
向 crond 发送 HUP 信号将迫使他关闭现有文件句柄并打开新文件句柄到原始路径 /var/log/cron.log 这将创建一个新文件。
使用 HUP 信号而不是另一个信号由程序自行决定。一些服务如 php-fpm 会监听 USR1 信号来重新打开它的文件句柄而不终止它自己。
归档时间: |
|
查看次数: |
10936 次 |
最近记录: |