在CentOS系统中,使用nohup
命令运行程序时,通常会将输出重定向到一个名为nohup.out
的文件中。随着时间的推移,这个文件可能会变得非常大,因此需要定期对其进行压缩和清理。以下是一些关于如何压缩和管理nohup.out
日志文件的技巧:
使用gzip
压缩nohup.out
文件:
在命令行中,使用以下命令将nohup.out
文件压缩为nohup.out.gz
:
gzip nohup.out
这将删除原始的nohup.out
文件,并创建一个压缩后的.gz
文件。
使用logrotate
工具管理日志文件:
logrotate
是一个用于管理日志文件的系统工具,可以自动压缩、删除和轮换日志文件。要配置logrotate
以处理nohup.out
文件,请按照以下步骤操作:
a. 创建一个新的logrotate
配置文件,例如/etc/logrotate.d/myapp
,并添加以下内容:
/path/to/your/nohup.out {
daily
rotate 7
compress
missingok
notifempty
create 640 user group
}
其中,/path/to/your/nohup.out
是nohup.out
文件的路径。这个配置表示每天轮换一次日志文件,保留最近7天的日志,压缩旧日志,如果日志文件不存在则不报错,如果日志文件为空则不进行轮换,以及创建新的日志文件时设置适当的权限和属主。
b. 确保logrotate
服务已安装并启用。在大多数CentOS版本中,logrotate
已经预装。你可以使用以下命令检查其状态:
systemctl status logrotate
如果需要,可以使用以下命令启动logrotate
服务:
systemctl start logrotate
定期手动压缩和清理nohup.out
文件:
如果你不想使用logrotate
,可以编写一个简单的shell脚本来定期压缩和清理nohup.out
文件。例如,创建一个名为compress_nohup.sh
的脚本,并添加以下内容:
#!/bin/bash
LOG_FILE="/path/to/your/nohup.out"
COMPRESSED_LOG_FILE="${LOG_FILE}.$(date +%Y%m%d%H%M%S)"
gzip "$LOG_FILE"
mv "${COMPRESSED_LOG_FILE}.gz" "$LOG_FILE.gz"
其中,/path/to/your/nohup.out
是nohup.out
文件的路径。这个脚本会将nohup.out
文件压缩为一个以当前日期和时间命名的.gz
文件,并将其移动到原始文件的位置。
然后,使用chmod
命令使脚本可执行:
chmod +x compress_nohup.sh
最后,将此脚本添加到cron
作业中以定期运行。例如,要每天凌晨1点运行此脚本,请执行以下命令:
crontab -e
在打开的编辑器中,添加以下行:
0 1 * * * /path/to/your/compress_nohup.sh
保存并关闭编辑器。现在,脚本将每天凌晨1点自动运行,压缩和清理nohup.out
文件。