定期清理程序日志

服务部署到SAE后,会面临日志清理的问题。不同技术栈语言应用的处理方案不同。例如,Java应用可以设置日志轮转达到自动清理的效果。但一些其他语言的应用,例如PHP,不带日志清理轮转的框架。此外,还有部分应用因为特殊原因无法设置轮转。这些应用都需要对应的方案自动清理程序日志。本文以CentOS和Debian操作系统为例,介绍如何通过SAE控制台配置程序的日志清理。

实施方案

通过SAE控制台自定义运行环境设置,安装并配置Crontab,达到定期清理的目的。您可以在创建或者部署应用时,填写自定义运行环境设置的相关参数。下图以ZIP包部署的PHP应用为例。sc_custom_runtime_enviroment_configuration

操作步骤

CentOS按最后操作时间清理

以下示例为每小时执行一次,对最后修改时间大于7天、以.log结尾的文件进行删除操作。

  1. 安装Crontab。

    #!/bin/bash
    
    set -o errexit
    set -o nounset
    set -o pipefail
    
    yum install -y crontab
  2. 添加待执行的定时任务表达式和命令。

    echo "0 * * * * root find /home/admin/logs/* -mtime +7 -name '*.log'  -exec rm -rf {}  \;">>/etc/crontab
    重要

    写入到/etc/crontab目录的内容中,一定要携带用户名(本示例为root)。

  3. 启动Crontab。

    展开应用生命周期管理设置区域,在启动后处理(PostStart设置)页签,输入Crontab的启动命令。

    /sbin/crond
    start

    sc_input_crontab_commands_in_poststart_configuration_for_centos

Debian按最后操作时间清理

以下示例为每小时执行一次,对最后修改时间大于7天、以.log结尾的文件进行删除操作。

  1. 安装Crontab。

    #!/bin/bash
    
    set -o errexit
    set -o nounset
    set -o pipefail
    
    apt-get update
    apt-get install -y cron
  2. 添加待执行的定时任务表达式和命令。

    echo "0 * * * * root find /home/admin/logs/* -mtime +7 -name '*.log'  -exec rm -rf {}  \;">>/etc/crontab
    重要

    写入到/etc/crontab目录的内容中,一定要携带用户名(本示例为root)。

  3. 启动Crontab。

    展开应用生命周期管理设置区域,在启动后处理(PostStart设置)页签,输入Crontab的启动命令。

    service
    cron
    start

    sc_input_crontab_commands_in_poststart_configuration_for_debian

Crontab参数说明

CentOS按最后操作时间清理Debian按最后操作时间清理这两个操作系统的Crontab命令行设置,都是通过echo命令,将Crontab的指令追加到/etc/crontab文件中。以下列命令为例,介绍配置过程中涉及的指令。

0 * * * * root find /home/admin/logs/* -mtime +7 -name '*.log'  -exec rm -rf {}  \;
  • 0 * * * *:Crontab执行时间的表达式。更多信息,请参见Crontab表达式说明

  • root:设定执行的账户。

  • 其余部分为要执行的指令,表示找到/home/admin/logs目录下所有文件,并删除其中超过7天未发生修改的文件。-mtime表示天,-mmin表示分钟。

文件清空清理

针对一些不会实现日志文件轮转的场景,可以直接清空文件内容。对于CentOS和Debian系统,安装和设置Crontab的方式和上文一致。以下示例仅介绍如何编写Crontab命令。

yes | cp /dev/null /home/admin/logs/demo.log

其中绝对路径/home/admin/logs/demo.log可以按需修改。

Crontab表达式说明

格式如下:

f1 f2 f3 f4 f5 program

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

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

常见的Crontab表达式如下。

执行时间

格式

每分钟定时执行一次

* * * * *

每小时定时执行一次

0 * * * *

每天定时执行一次

0 0 * * *

每周定时执行一次

0 0 * * 0

每月定时执行一次

0 0 1 * *

镜像补充

如果以镜像方式部署的应用,需要使用自定义运行环境设置的方式清理日志,您需要自行安装和启动Crontab命令,并将镜像源替换成阿里云的内网源。关于替换内网源的具体操作,请参见CentOS镜像