nohup 默认会把输出写到 nohup.out,时间一长会非常大。常见处理思路有:压缩旧日志、滚动切割、重定向控制输出。下面按实用程度给你几种方案。
gzip nohup.out
生成 nohup.out.gz,原文件消失。
如果程序还在写这个文件,不要直接 rm,否则进程还会持有文件句柄,磁盘不会释放。
: > nohup.out
# 或
truncate -s 0 nohup.out
文件还在,大小变 0,进程继续写。
适合长期运行的服务。
/etc/logrotate.d/myapp/path/to/nohup.out {
daily
rotate 7
compress
copytruncate
missingok
notifempty
}
关键点:
copytruncate:复制后清空原文件(不重启进程)compress:自动 gziprotate 7:保留 7 份测试:
logrotate -d /etc/logrotate.d/myapp
启动时就做切割:
nohup ./app | rotatelogs -n 7 nohup.%Y%m%d.log 86400 &
每天一个新文件,保留 7 个。
nohup ./app > app.log 2>&1 &
nohup ./app | split -b 100m - app.log.
safest 操作顺序:
cp nohup.out nohup.out.bak
gzip nohup.out.bak
: > nohup.out
gzip 或 truncatelogrotate + copytruncate如果你愿意,可以告诉我:
我可以给你更精确的配置。