我对logrotation的观察是,按照以下顺序来旋转任何日志文件,即logrotate进程
我在这个过程中遇到以下问题:
要做到这一点,我想logrotate移动,mv命令所做的一些事情,它重命名文件,而不是复制它们。 至于压缩,我可以禁用,并通过不同的脚本通过计划通过cron触发它。 但我想logrotate移动文件,而不是复制它们。
现在,确定这是logrotate的作者也会考虑的一些事情,因为它明显地节省了磁盘IO和完成整个logrotate操作的时间,所以我想要为什么文件被复制而不是被移动或重命名,以及如何我是否通过logrotate来实现这一点?
注:我试图手动执行它,也就是移动正在运行的进程正在写入的文件,并创build一个具有相同名称和相同权限的新空白文件(即root,这也是进程的权限运行),但移动并创build一个新的文件后,我看到该进程没有写任何东西,所以不得不重新启动进程,使其写入该文件。 任何人也可以解释这种行为,为什么logrotatepipe理,使进程写入相同的文件,但我不能使用简单的步骤。
您所描述的行为只会在通过copytruncate指令明确告知logrotate时发生。 该文档警告可能会由于此行为而丢失一些日志数据。 该指令只能作为最后的手段使用。
旋转日志文件的标准方法是重命名,然后发送一个信号给进程,让它打开新的日志文件。 这是更快,不会冒失去部分日志的风险。 但是它要求写入过程能够切换到新的日志文件。
压缩可以被closures或推迟到下一次旋转。 如果使用compress指令,则旧的日志文件被压缩。 如果该指令未被使用,则不被压缩。
如果使用compress和delaycompress ,则压缩将延迟到下一次旋转。 这样在每次旋转之后,两个最新的日志文件还没有被压缩。
在移动并创build一个新文件之后,我看到这个进程并没有写任何东西,所以不得不重新启动这个进程来写入这个文件
进程正在写入相同的文件,这就是为什么lograte复制而不是移动。 当你删除日志时,进程仍然写入日志,你可以看到文件系统使用增长,但没有文件。 进程重启将释放磁盘空间。
考虑到