nohup
命令用于在后台运行程序,即使关闭终端或断开连接,程序也会继续运行。默认情况下,nohup
会将输出重定向到名为 nohup.out
的文件中。为了实现日志轮转,可以使用 logrotate
工具或者自定义脚本来实现。
确保已经安装了 logrotate
。在大多数 Linux 发行版中,它已经是预装的。如果没有,可以使用包管理器进行安装,例如:
sudo apt-get install logrotate # Debian/Ubuntu
sudo yum install logrotate # CentOS/RHEL
创建一个 logrotate
配置文件,例如 /etc/logrotate.d/myapp
,并添加以下内容:
/path/to/your/nohup.out {
daily
rotate 7
compress
missingok
notifempty
create 0640 user group
}
这里的配置表示每天轮转一次日志,保留最近 7 天的日志,压缩旧日志,如果日志文件不存在则不报错,如果日志文件为空则不轮转,以及创建新的日志文件时设置权限和属主属组。
重新加载 logrotate
配置:
sudo logrotate -f /etc/logrotate.conf
这将强制 logrotate
重新加载配置文件并立即应用更改。
创建一个名为 rotate_logs.sh
的脚本,并添加以下内容:
#!/bin/bash
LOG_FILE="/path/to/your/nohup.out"
MAX_LOG_SIZE=104857600 # 100 MB
BACKUP_COUNT=7
if [ -f "$LOG_FILE" ]; then
# 检查日志文件大小
FILE_SIZE=$(stat -c%s "$LOG_FILE")
if [ $FILE_SIZE -gt $MAX_LOG_SIZE ]; then
# 轮转日志
mv "$LOG_FILE" "${LOG_FILE}.$(date +%Y%m%d%H%M%S)"
touch "$LOG_FILE"
fi
fi
# 删除旧日志
find /path/to/your/logs -type f -name "nohup.out.*" -mtime +$BACKUP_COUNT -exec rm {} \;
这个脚本会检查日志文件的大小,如果超过 100 MB,则将其重命名并创建一个新的空日志文件。同时,它会删除超过 7 天的旧日志。
为脚本添加可执行权限:
chmod +x rotate_logs.sh
将脚本添加到 cron
任务中,以便定期运行。例如,每天凌晨 1 点运行:
crontab -e
在打开的编辑器中添加以下行:
0 1 * * * /path/to/rotate_logs.sh
保存并退出编辑器。
这样,无论是使用 logrotate
还是自定义脚本,都可以实现 nohup
命令输出日志的轮转。