定期清理程序日志

更新时间:
复制为 MD 格式

应用日志需要定期清理,否则大量日志挤占存储空间将导致应用功能异常。日志清理功能可以在程序代码中实现。此外,本文介绍一种方案,仅需简单配置即可实现定期清理SAE应用的日志。

方案概述

借助应用运行环境中的Cron工具,根据用户的定时任务配置,自动执行日志清理任务。

操作步骤

通过代码包部署的应用

针对不同的操作系统版本,安装和配置Cron工具的方法如下:

说明

应用运行环境对应的操作系统版本,请参见使用代码包部署应用

Debian操作系统

  1. 安装Cron工具并配置定时任务

    在创建应用或部署应用时,应用部署方式选择代码包部署,点击设置代码包部署,开启自定义运行环境设置(包括预装工具、下载/修改文件、安装运行时依赖/扩展等),输入以下命令:

    #!/bin/bash
    
    set -o errexit
    set -o nounset
    set -o pipefail
    
    # 安装Cron工具:
    apt-get update || true
    apt-get install -y cron
    
    # 配置定时任务(详细信息请参见本文的定时任务参数说明):
    echo "0 * * * * root find /home/admin/logs/* -mtime +7 -name '*.log'  -exec rm -rf {}  \;">>/etc/crontab # 每小时执行,删除超过7天未发生修改的日志文件。
    # 为了便于快速验证效果,可以采用如下配置:
    # echo "* * * * * root find /home/admin/logs/* -mmin +1 -name '*.log'  -exec rm -rf {}  \;">>/etc/crontab # 每分钟执行,删除超过1分钟未发生修改的日志文件。
  2. 启动Cron工具

    在创建应用或部署应用时,在应用生命周期管理区域,开启启动后处理(PostStart设置),输入以下命令:

    service cron start

CentOS操作系统

  1. 安装Cron工具并配置定时任务

    在创建应用或部署应用时,应用部署方式选择代码包部署,点击设置代码包部署,开启自定义运行环境设置(包括预装工具、下载/修改文件、安装运行时依赖/扩展等),输入以下命令:

    #!/bin/bash
    
    # 运行环境中自带Cron工具,无需安装。
    
    # 配置定时任务(详细信息请参见本文的定时任务参数说明):
    echo "0 * * * * root find /home/admin/logs/* -mtime +7 -name '*.log'  -exec rm -rf {}  \;">>/etc/crontab # 每小时执行,删除超过7天未发生修改的日志文件。
    # 为了便于快速验证效果,可以采用如下配置:
    # echo "* * * * * root find /home/admin/logs/* -mmin +1 -name '*.log'  -exec rm -rf {}  \;">>/etc/crontab # 每分钟执行,删除超过1分钟未发生修改的日志文件。
  2. 启动Cron工具

    在创建应用或部署应用时,在应用生命周期管理区域,开启启动后处理(PostStart设置),输入以下命令:

    /sbin/crond start

通过镜像部署的应用

  1. 在构建镜像阶段,自行安装Cron工具并配置定时任务。

  2. 在创建应用或部署应用时,在应用生命周期管理区域,开启启动后处理(PostStart设置),输入以下命令:

    • 基于Debian操作系统的镜像:service cron start

    • 基于CentOS操作系统的镜像:/sbin/crond start

定时任务参数说明

关于配置定时任务的命令,详细说明如下:

echo "0 * * * * root find /home/admin/logs/* -mtime +7 -name '*.log'  -exec rm -rf {}  \;">>/etc/crontab
  • /etc/crontab:定时任务的配置文件。

  • 0 * * * *:Crontab表达式,用于配置定时任务的执行时间,可自定义,格式如下:

    f1 f2 f3 f4 f5

    其中f1表示分钟,f2表示小时,f3表示一个月份中的第几日,f4表示月份,f5表示一个星期中的第几天。

    f1*时,表示每分钟都要执行程序,f2*时,表示每小时都要执行程序,以此类推。

    常见的Crontab表达式如下。

    执行时间

    格式

    每分钟定时执行一次

    * * * * *

    每小时定时执行一次

    0 * * * *

    每天定时执行一次

    0 0 * * *

    每周定时执行一次

    0 0 * * 0

    每月定时执行一次

    0 0 1 * *

  • root:执行定时任务的用户。

  • find /home/admin/logs/* -mtime +7 -name '*.log' -exec rm -rf {} \;:表示找到/home/admin/logs目录下所有日志文件,并删除其中超过7天未发生修改的文件。-mtime表示天,-mmin表示分钟。