我使用命令:
nohup <command to run> &
同时它记录到nohup.out文件中,但是这个日志文件可能会变得相当大,因此想知道是否有一种方法在nohup.out变得过大时自动将输出保存到nohup1.out、nohup2.out、nohup3.out等文件中。所有这些操作都不会终止原始命令。
nohup <command to run> &
同时它记录到nohup.out文件中,但是这个日志文件可能会变得相当大,因此想知道是否有一种方法在nohup.out变得过大时自动将输出保存到nohup1.out、nohup2.out、nohup3.out等文件中。所有这些操作都不会终止原始命令。
logrotate(8)
很可能是您需要的,而且可能已经在您的 Linux 发行版中。在 /etc/logrotate.conf 中指定大小限制和要旋转的数量。
从thegeekstuff.com的示例中:
/tmp/output.log {
size 1k
create 700 user user
rotate 4
}
然后运行 logrotate /etc/logrotate.conf
。
由于系统已经作为 cron 作业运行并且状态文件已经存在(与示例中的位置不同),因此我忽略了示例的文件状态位置。
对于像我这样已经运行脚本且无法终止的人,可以使用以下方法:
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以获取新输出。