使用 nohup 和 logrotate 实现定时日志分割

在 Linux 系统中,nohup 命令通常用于在终端关闭后继续运行进程。然而,nohup 本身并不具备日志管理功能,比如定时分割日志文件。为了实现每天生成一个新的日志文件,我们需要结合 nohuplogrotate 工具。

1. 使用 nohup 启动进程

首先,我们使用 nohup 命令启动一个需要记录日志的进程。例如,我们有一个脚本 my_script.sh,它会输出日志到 my_script.log 文件中。

nohup ./my_script.sh > my_script.log 2>&1 &

这条命令会将 my_script.sh 的标准输出和标准错误输出重定向到 my_script.log 文件中,并在后台运行。

2. 安装 logrotate

logrotate 是一个用于管理日志文件的工具,它可以根据配置文件的规则自动压缩、删除和邮寄日志文件。大多数 Linux 发行版都默认安装了 logrotate,如果没有安装,可以使用包管理器进行安装。

例如,在 Debian/Ubuntu 系统上:

sudo apt-get update
sudo apt-get install logrotate

在 CentOS/RHEL 系统上:

sudo yum install logrotate

3. 配置 logrotate

接下来,我们需要为 my_script.log 文件创建一个 logrotate 配置文件。通常,系统级别的 logrotate 配置文件位于 /etc/logrotate.conf/etc/logrotate.d/ 目录下。

我们可以创建一个新的配置文件,比如 /etc/logrotate.d/my_script,内容如下:

/path/to/my_script.log {
    daily                  # 每天轮转一次日志文件
    rotate 7               # 保留最近7个日志文件
    missingok              # 如果日志文件不存在,不报错继续下一个日志文件的处理
    notifempty             # 如果日志文件为空,不进行轮转
    compress               # 轮转后的日志文件进行压缩
    delaycompress          # 延迟压缩到下一个轮转周期,确保当前日志文件是未压缩的
    create 0640 user group # 以指定的权限和所有者/组创建新的日志文件
    postrotate
        # 这里可以放置一些在日志轮转后需要执行的命令
        # 比如重启服务或发送通知等
        # 例如:systemctl restart my_service 或者 echo "Log rotated" >> /var/log/my_script_rotation.log
    endscript
}






扫描下方二维码,关注公众号:程序进阶之路,实时获取更多优质文章推送。


扫码关注

评论