温馨提示×

如何限制centos nohup日志大小

小樊
47
2026-01-10 17:42:01
栏目: 智能运维

在 CentOS 系统中,nohup 命令用于在后台运行程序,即使关闭终端也不会中断

  1. 使用 logrotate 工具:

logrotate 是一个用于管理日志文件的工具,可以自动压缩、删除和轮换日志文件。首先,确保 logrotate 已经安装在您的 CentOS 系统上。如果没有安装,可以使用以下命令安装:

sudo yum install logrotate

接下来,创建一个新的 logrotate 配置文件,例如 /etc/logrotate.d/myapp,并添加以下内容:

/path/to/your/nohup/output.log {
    size 100M
    rotate 5
    compress
    missingok
    notifempty
    create 640 root root
}

在这个配置文件中,我们设置了日志文件的最大大小为 100MB,保留 5 个轮换日志文件,压缩旧的日志文件,如果日志文件丢失则不报错,如果日志文件为空则不进行轮换,以及设置新日志文件的权限和所有者。

最后,确保 logrotate 定期运行。通常,logrotate 会自动运行,但你也可以手动触发它:

sudo logrotate -f /etc/logrotate.conf
  1. 使用自定义脚本:

创建一个自定义脚本,例如 run_myapp.sh,并在其中使用 split 命令限制日志文件的大小:

#!/bin/bash

# 设置日志文件的最大大小(以字节为单位)
max_size=104857600 # 100MB

# 运行你的应用程序,并将输出重定向到日志文件
./myapp > nohup.out

# 检查日志文件大小,如果超过最大值,则进行轮换
while [ $(stat -c%s "nohup.out") -gt $max_size ]; do
    # 重命名当前日志文件
    mv nohup.out nohup.out.$(date +%Y%m%d%H%M%S)

    # 创建一个新的空日志文件
    touch nohup.out

    # 可选:发送通知,例如邮件,告知日志已轮换
    # mail -s "Log rotated" your_email@example.com < nohup.out.$(date +%Y%m%d%H%M%S)
done

在这个脚本中,我们首先运行应用程序并将输出重定向到 nohup.out 文件。然后,我们使用 while 循环检查日志文件的大小,如果超过最大值(100MB),则将当前日志文件重命名并创建一个新的空日志文件。

最后,为脚本添加可执行权限并运行它:

chmod +x run_myapp.sh
./run_myapp.sh

请注意,这种方法可能需要更多的维护工作,因为你需要手动运行脚本。使用 logrotate 工具是更推荐的方法,因为它可以自动处理日志轮换。

0