TS_ Asked: 2021-10-13 08:24:30 +0800 CST2021-10-13 08:24:30 +0800 CST 2021-10-13 08:24:30 +0800 CST logrotate 是如何工作的? 772 当它“旋转”一个日志文件时,logrotate 究竟做了什么?例如,它是否重命名现有文件并使用旧名称创建一个新文件? 本文介绍了在日志轮换后重新启动服务,以便它可以使用新的日志文件。这仅仅是因为该进程可能会保留旧文件的打开句柄吗?如果我的进程每次写入日志时都会打开一个新的文件句柄,它会在不重新启动的情况下使用新的日志文件吗? linux logrotate 1 个回答 Voted Best Answer drookie 2021-10-13T09:13:35+08:002021-10-13T09:13:35+08:00 除非copytruncate使用 ,否则每次将日志重命名为新名称(例如log.0),然后创建空文件。postrotate用于通知所有者进程需要重新打开日志。 如果进程是哑的并且不能通过信号重新打开它的日志,那么copytruncate应该使用 - 在这种情况下,日志文件的内容被复制而不是重命名,然后日志只是被截断。 如果一个进程为每次写入重新打开日志(因此它应该在此之后关闭日志,否则打开的文件句柄将堆积起来,除非用尽操作系统/用户限制),那么您可以省略所有者进程通知。但这种情况很少见,因为当大量信息不断写入日志时,这种方法会危及日志写入器的性能。
除非
copytruncate
使用 ,否则每次将日志重命名为新名称(例如log.0),然后创建空文件。postrotate
用于通知所有者进程需要重新打开日志。如果进程是哑的并且不能通过信号重新打开它的日志,那么
copytruncate
应该使用 - 在这种情况下,日志文件的内容被复制而不是重命名,然后日志只是被截断。如果一个进程为每次写入重新打开日志(因此它应该在此之后关闭日志,否则打开的文件句柄将堆积起来,除非用尽操作系统/用户限制),那么您可以省略所有者进程通知。但这种情况很少见,因为当大量信息不断写入日志时,这种方法会危及日志写入器的性能。