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
日志文件,防止其变得过大。选择适合你需求的方法进行配置即可。