有没有正确的方法来清除日志?

我想知道是否有一个正确的方式来清除日志一般?

我是Ubuntu的新手,我试图设置Postfix。 login问题是/var/log/mail.log 。 我想知道是否有一个正确的方法来清除它,而不是我进去,删除所有的行,并保存它。 我发现在清除日志并保存之后,有时错误不会立即写入。

附注:我在设置Postfix时遇到了麻烦,并且正在努力使我更容易阅读日志,希望它能帮助我,而不必一直向下滚动。

    您可以使用:

     > /var/log/mail.log 

    这将截断日志,而不必编辑文件。 这也是获得空间的可靠方法。 有时候人们犯了一个错误,就是在日志中使用rm,然后重新创build文件名,如果另一个进程打开文件,那么在这个进程closures它的句柄之前你没有得到空间,你可以搞砸了权限。

    另外,如果您正在观看日志的内容,您可能会喜欢使用tail命令:

     tail -f /var/log/mail.log 

    Ctrl-C会中断拖尾。

    是的,有一个正确的方法:你根本不清楚日志。 你旋转它们。 轮转包括将日志输出切换到一个新文件,名称相同,前N个日志文件保存在一组N个相关文件名下。

    一个人如何旋转日志取决于一个人如何写他们的第一个地方。 这是一个经常被忽视的观点。 这里至less有一些答案提到了这个问题,提到某些日志程序为日志文件保留了一个打开的文件描述符,所以只要删除这个文件就不会释放这个空间,或者甚至把输出切换到一个新的日志文件。

    例如,如果编写日志文件的程序是来自daemontools软件包的multilog ,那么您根本就没有做任何事情来轮换日志 – 没有手动脚本,也没有cron作业。 只要告诉multilog日志输出到一个目录,它自己就会在该目录中维护一个自动旋转和大小限制的N个日志文件。

    如果编写日志文件的程序是来自runit软件包的runit ,那么另一个例子就是这样。 除了指向目录上的工具之外,你什么都不做。 它将自己维护一个自动旋转和大小上限的N个日志文件在该目录中。

    如果使用rsyslog写入日志文件,则可以通知日志程序在日志文件达到特定大小并运行脚本后停止 。 你必须写脚本的肉,实际上重命名日志文件,并根据总大小的限制删除旧的日志文件,但至less日志程序已经closures文件,并暂停日志写作,而这种情况正在发生。

    旧日志syslogd旋转日志的方式,日志logging程序(如syslog-ng)和日志logging工具(例如djangofan在这里提到的另一个回答中所提到的工具)所示,这种方式有点杂乱无章。 一个运行一个定期重命名日志文件的cron作业,并重新启动日志守护进程(使用它正在运行的守护进程)。 这个问题当然是不强制执行整体大小上限。 在缓慢的星期,可以得到N个非常小的每日日志文件,而在繁忙的日子里,可以得到1个非常大的日志文件,这个文件大大超过了大小限制。

    这就是为什么像multilogsvlogd这样更svlogd更好的工具有文件大小configuration选项,当然svlogd检查日志文件的大小。 世界已经知道,使用cron作业轮询日志,甚至使用logrotate守护进程,会留下大小错误的窗口,并且有适当的地方进行这些检查,并严格执行pipe理员定义的大小上限那个人的日志文件永远不会吞下他们所在的分区,而是放在实际上把文件写出来的程序中。

    是的,有一个名为LogRotate的 Linux工具。

    如果清除日志的原因是释放空间,那么可以将/ dev / null设置为空,而不会中断写入的程序。 切勿删除它们! 一些软件可能会停止工作或完全忽略日志,直到下一次重新启动

     cat /dev/null > /path/to/logfile # to empty all the logs in a directory for i in /var/log/*; do cat /dev/null > $i; done 

    简短且兼容的内容覆盖:: : > /dest/file

    但也有truncate(2)系统调用,相应的用户空间工具在许多* NIX中truncate

    你也可以用这个

     truncate /opt/package/logs/*.log --size 0 

    这里/ opt / package / logs中的所有日志文件将变为空白。

    如果要在清理之前保留该文件,可以执行以下操作:

     cp /var/log/mail.log /var/log/mail.log.1 && echo -n "" > /var/log/mail.log 

    如果您想在日志中search特定的文本或电子邮件,则可以使用grep。 如果你想保留一些关于邮件使用的graphics,你可以使用AWStats。

    cat / dev / null> / path / to / logfile

    为我工作

    下面是我如何做的,这只是NGINX,你可以删除它,使其在所有日志文件上工作。

     # Clear nginx logs. # @usage delnginxlogs function delnginxlogs() { echo "--------------- ⏲ Clearing logs... ---------------" # Clear logs. for i in /var/log/nginx/*; do cat /dev/null > $i; done echo "--------------- ⏲ Deleting .gz log files... ---------------" # Delete .gz files. find /var/log/nginx -type f -regex ".*\.gz$" -delete echo "--------------- 💯 DONE: NGINX logs cleared ... ---------------" }