nohup 命令用于在后台运行程序,即使关闭终端也不会中断。默认情况下,nohup 会将输出重定向到 nohup.out 文件。为了防止这个文件变得过大,可以使用日志轮转策略。以下是几种常见的方法来设置 nohup 日志的轮转策略:
logrotate 工具logrotate 是一个非常强大的日志管理工具,可以自动轮转、压缩和删除日志文件。
创建一个配置文件:
在 /etc/logrotate.d/ 目录下创建一个新的配置文件,例如 myapp。
sudo nano /etc/logrotate.d/myapp
添加配置内容: 在配置文件中添加以下内容:
/path/to/nohup.out {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 640 root adm
}
解释:
daily: 每天轮转一次日志。rotate 7: 保留7个轮转后的日志文件。compress: 压缩轮转后的日志文件。delaycompress: 延迟压缩,直到下一次轮转。missingok: 如果日志文件不存在,不会报错。notifempty: 如果日志文件为空,不进行轮转。create 640 root adm: 创建新的日志文件,权限为640,属主为root,属组为adm。测试配置:
你可以手动测试 logrotate 配置是否正确:
sudo logrotate -f /etc/logrotate.d/myapp
cron 定时任务如果你不想使用 logrotate,也可以使用 cron 定时任务来手动轮转日志。
编辑 crontab 文件:
crontab -e
添加定时任务: 添加以下内容,每天午夜执行一次日志轮转:
0 0 * * * /bin/mv /path/to/nohup.out /path/to/nohup.out.$(date +\%Y\%m\%d)
0 0 * * * /usr/bin/find /path/to -name 'nohup.out.*' -type f -mtime +7 -exec rm {} \;
解释:
nohup.out 重命名为 nohup.out.YYYYMMDD。split 命令你也可以使用 split 命令来分割日志文件。
创建一个脚本:
创建一个脚本文件,例如 rotate_nohup.sh。
nano rotate_nohup.sh
添加脚本内容:
#!/bin/bash
LOG_FILE="/path/to/nohup.out"
MAX_SIZE=100M
TIMESTAMP=$(date +\%Y\%m\%d\%H\%M\%S)
mv $LOG_FILE "${LOG_FILE}.${TIMESTAMP}"
touch $LOG_FILE
赋予执行权限:
chmod +x rotate_nohup.sh
添加 cron 定时任务:
crontab -e
添加以下内容,每小时检查并分割日志文件:
0 * * * * /path/to/rotate_nohup.sh
通过以上方法,你可以有效地管理 nohup 日志文件,防止其变得过大。选择适合你需求的方法进行配置即可。