如何限制 nohup.out 日志文件的大小

17
我使用命令:
nohup <command to run> & 

同时它记录到nohup.out文件中,但是这个日志文件可能会变得相当大,因此想知道是否有一种方法在nohup.out变得过大时自动将输出保存到nohup1.out、nohup2.out、nohup3.out等文件中。所有这些操作都不会终止原始命令。

2个回答

12

logrotate(8) 很可能是您需要的,而且可能已经在您的 Linux 发行版中。在 /etc/logrotate.conf 中指定大小限制和要旋转的数量。

thegeekstuff.com的示例中:

/tmp/output.log {
        size 1k
        create 700 user user
        rotate 4
}
  • size 1k – 如果文件大小等于或大于此大小,则 logrotate 才会运行。
  • create - 旋转原始文件并创建带有指定权限、用户和组的新文件。
  • rotate - 限制日志文件旋转的数量,因此这将仅保留最近的4个旋转的日志文件。

然后运行 logrotate /etc/logrotate.conf

由于系统已经作为 cron 作业运行并且状态文件已经存在(与示例中的位置不同),因此我忽略了示例的文件状态位置。


1

对于像我这样已经运行脚本且无法终止的人,可以使用以下方法:

nohup sh -c 'COUNTER=1; while true; do SIZE=$(stat --printf="%s" nohup.out); if [ $SIZE -gt 10000 ]; then cp nohup.out "nohup$COUNTER.out"; echo "" > nohup.out; COUNTER=$((COUNTER + 1)); fi; sleep 60; done' >/dev/null 2>&1 &

这个命令将在后台运行(不保存任何日志文件),每60秒备份nohup.out文件,如果它大于10kb(如果您想要更大的日志文件,可以修改该10000数字),并截断nohup.out以获取新输出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接