linux

nohup命令日志中如何实现日志轮转

小樊
48
2025-04-17 02:43:46
栏目: 编程语言

nohup 命令用于在后台运行程序,即使关闭终端或断开连接,程序也会继续运行。默认情况下,nohup 会将输出重定向到名为 nohup.out 的文件中。为了实现日志轮转,可以使用 logrotate 工具或者自定义脚本来实现。

使用 logrotate 实现日志轮转

  1. 确保已经安装了 logrotate。在大多数 Linux 发行版中,logrotate 已经预装。如果没有安装,可以使用以下命令安装:

    sudo apt-get install logrotate   # Debian/Ubuntu
    sudo yum install logrotate       # CentOS/RHEL
    
  2. 创建一个 logrotate 配置文件,例如 /etc/logrotate.d/myapp,并添加以下内容:

    /path/to/your/logs/nohup.out {
        daily
        rotate 7
        compress
        missingok
        notifempty
        create 0640 user group
    }
    

    这个配置表示每天轮转一次日志,保留最近 7 天的日志,压缩旧日志,如果日志文件不存在则不报错,如果日志文件为空则不轮转,创建新的日志文件并设置权限和属主属组。

  3. 确保 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

这样,你的日志文件将在达到指定大小时自动轮转,并保留指定数量的旧日志。

0
看了该问题的人还看了