nohup
命令用于在后台运行程序,即使关闭终端或断开连接,程序也会继续运行。默认情况下,nohup
会将输出重定向到名为 nohup.out
的文件中。为了实现日志轮转,可以使用 logrotate
工具或者自定义脚本来实现。
确保已经安装了 logrotate
。在大多数 Linux 发行版中,logrotate
已经预装。如果没有安装,可以使用以下命令安装:
sudo apt-get install logrotate # Debian/Ubuntu
sudo yum install logrotate # CentOS/RHEL
创建一个 logrotate
配置文件,例如 /etc/logrotate.d/myapp
,并添加以下内容:
/path/to/your/logs/nohup.out {
daily
rotate 7
compress
missingok
notifempty
create 0640 user group
}
这个配置表示每天轮转一次日志,保留最近 7 天的日志,压缩旧日志,如果日志文件不存在则不报错,如果日志文件为空则不轮转,创建新的日志文件并设置权限和属主属组。
确保 logrotate
定时任务已启用。通常,logrotate
会自动运行,但你可以检查 /etc/cron.daily/logrotate
文件是否存在并确保其可执行。
如果你不想使用 logrotate
,可以编写一个简单的 shell 脚本来实现日志轮转。以下是一个示例脚本:
#!/bin/bash
LOG_FILE="/path/to/your/logs/nohup.out"
MAX_LOG_SIZE=104857600 # 100MB
BACKUP_COUNT=7
if [ -f "$LOG_FILE" ]; then
LOG_SIZE=$(stat -c%s "$LOG_FILE")
if [ "$LOG_SIZE" -gt "$MAX_LOG_SIZE" ]; then
mv "$LOG_FILE" "${LOG_FILE}.$(date +%Y%m%d%H%M%S)"
gzip "${LOG_FILE}.$(date +%Y%m%d%H%M%S)"
touch "$LOG_FILE"
fi
fi
# 移动旧日志文件并压缩
find /path/to/your/logs -name "nohup.out.*" -type f -mtime +$BACKUP_COUNT -exec gzip {} \;
将此脚本保存为 rotate_logs.sh
,并使用 chmod +x rotate_logs.sh
命令使其可执行。然后,你可以将此脚本添加到 cron
定时任务中,例如每天运行一次:
0 0 * * * /path/to/rotate_logs.sh
这样,你的日志文件将在达到指定大小时自动轮转,并保留指定数量的旧日志。