日志截断/日志中途清空/不停止程序
使用场景:
nohup ./abc.sh > 123.log 2>&1 &
若想在不停止程序的前提下减小 123.log
的占用空间或者对日志进行分割,可采用如下方法:
1. 手动截断日志
可以手动截断日志文件,把文件内容清空,但保留文件的inode,这样程序就能继续往该文件写入日志。
cp /dev/null 123.log
此命令会把 123.log
文件的内容清空,不过文件的inode保持不变,程序依旧能往该文件写入日志。
2. 使用logrotate
logrotate
是一个用于管理日志文件的工具,它能够自动对日志文件进行分割、压缩和删除等操作。
配置logrotate
先创建一个 logrotate
的配置文件,例如 /etc/logrotate.d/a_log
,内容如下:
/path/to/123.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 yourusername yourgroupname
sharedscripts
postrotate
# 如果你的程序需要重新加载日志文件描述符,可以在这里添加相应的命令
# 例如,使用 kill -HUP <pid> 来通知程序重新加载日志文件描述符
endscript
}
配置说明
daily
:每天对日志文件进行分割。missingok
:若日志文件不存在,不报错。rotate 7
:保留最近7天的日志文件。compress
:对旧的日志文件进行压缩。delaycompress
:延迟压缩上一次分割的日志文件。notifempty
:若日志文件为空,不进行分割。create 640 yourusername yourgroupname
:分割后创建新的日志文件,并设置权限和所有者。sharedscripts
:在所有日志文件都处理完毕后执行postrotate
脚本。postrotate
:在日志文件分割完成后执行的脚本,可用于通知程序重新加载日志文件描述符。
手动执行logrotate
配置完成后,可手动执行 logrotate
来测试配置是否生效:
logrotate -f /etc/logrotate.d/a_log
3. 使用split命令分割日志
可以使用 split
命令对日志文件进行分割:
split -b 10M 123.log 123.log.
此命令会把 123.log
文件分割成每个大小为10MB的小文件,文件名以 123.log.
开头。分割完成后,可手动清空 123.log
文件:
cp /dev/null 123.log
这样程序就会继续往新的 123.log
文件写入日志。