linux

nohup命令的输出日志如何进行轮转

小樊
42
2025-09-18 05:00:08
栏目: 编程语言

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

使用 logrotate 实现日志轮转

  1. 确保已经安装了 logrotate。在大多数 Linux 发行版中,它已经是预装的。如果没有,可以使用包管理器进行安装,例如:

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

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

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

  3. 重新加载 logrotate 配置:

    sudo logrotate -f /etc/logrotate.conf
    

    这将强制 logrotate 重新加载配置文件并立即应用更改。

使用自定义脚本实现日志轮转

  1. 创建一个名为 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 天的旧日志。

  2. 为脚本添加可执行权限:

    chmod +x rotate_logs.sh
    
  3. 将脚本添加到 cron 任务中,以便定期运行。例如,每天凌晨 1 点运行:

    crontab -e
    

    在打开的编辑器中添加以下行:

    0 1 * * * /path/to/rotate_logs.sh
    

    保存并退出编辑器。

这样,无论是使用 logrotate 还是自定义脚本,都可以实现 nohup 命令输出日志的轮转。

0
看了该问题的人还看了