mas*_*act 80 linux ubuntu logging
我想知道是否有适当的方法来清除一般的日志?
我是 Ubuntu 的新手,我正在尝试设置 Postfix。有问题的登录是/var/log/mail.log。我想知道是否有正确的方法来清除它,而不是我进入它并删除所有行并保存它。我发现有时在我清除日志并保存后不会立即写入错误。
旁注:我在设置 Postfix 时遇到问题,我试图让我更轻松地阅读日志,希望它可以帮助我,而不必一直向下滚动。
dav*_*vey 91
您可以使用:
> /var/log/mail.log
Run Code Online (Sandbox Code Playgroud)
这将截断日志,而无需编辑文件。这也是恢复空间的可靠方法。有时人们会错误地在日志上使用 rm 然后重新创建文件名,如果另一个进程打开了该文件,那么在该进程关闭它的句柄之前,您不会收回空间,并且您可能会弄乱它的权限。
此外,如果您正在查看日志的内容,您可能想使用以下tail命令:
tail -f /var/log/mail.log
Run Code Online (Sandbox Code Playgroud)
Ctrl-C 将断开拖尾。
小智 31
你也可以用这个..
truncate /opt/package/logs/*.log --size 0
Run Code Online (Sandbox Code Playgroud)
这里 /opt/package/logs 中的所有日志文件都将变为空..
Jde*_*eBP 30
是的,有一个正确的方法:您根本不清除日志。你旋转它们。轮换涉及将日志输出切换到同名的新文件,前 N 个日志文件保存在一组 N 个相关文件名下。
如何旋转日志取决于人们如何编写它们。 这是一个经常被忽视的点。这里的一些答案至少涉及它,提到一些日志程序为日志文件保留了一个打开的文件描述符,因此仅删除文件不会释放空间,甚至甚至将输出切换到新的日志文件。
例如,如果写入日志文件的程序multilog来自daemontools包,那么您根本不需要做任何事情来轮换日志——没有手动脚本,没有cron作业。简单地告诉multilog日志输出到一个目录,它本身将在该目录中维护一个自动轮换和大小限制的 N 个日志文件集。
如果写入日志文件的程序svlogd来自runitpackage,例如另一个例子,那么同样适用。除了将工具指向目录之外,您什么都不做。它本身将在该目录中维护一组自动轮换和大小限制的 N 个日志文件。
如果您使用rsyslog写入日志文件,则可以告诉日志程序在日志文件达到一定大小后停止并运行脚本。您必须编写脚本的主要内容,根据总大小限制实际重命名日志文件并删除旧日志文件,但至少日志程序已关闭文件并在发生这种情况时暂停日志写入。
syslogd日志记录程序(例如 syslog-ng以及此处的另一个答案中logrotate提到的工具所举例说明的)仍然希望使用旧的日志轮换方式,但这种方式djangofan更加随意。运行一项cron定期重命名日志文件的作业,并重新启动日志守护程序(使用它正在运行的任何守护程序主管)。当然,这样做的问题是它没有强制执行整体尺寸上限。在缓慢的几周内,您可以获得 N 个非常小的每日日志文件,而在繁忙的日子里,您可以获得 1 个远远超过大小限制的非常大的日志文件。
这就是为什么后来更好的工具喜欢multilog并svlogd具有文件大小配置选项并实际检查日志文件大小的原因,当然。全世界都知道,按计划使用cron作业或什至logrotate守护程序轮询日志,会导致窗口大小错误,并且是进行这些检查的正确位置,因此严格执行管理员定义的大小上限,以便日志文件永远不会吞下它们所在的分区,而是在首先实际将文件写出的程序中。
小智 10
如果您清除日志的原因是为了释放空间,您可以将 /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
Run Code Online (Sandbox Code Playgroud)