服务部署到SAE后,会面临日志清理的问题。不同技术栈语言应用的处理方案不同。例如,Java应用可以设置日志轮转达到自动清理的效果。但一些其他语言的应用,例如PHP,不带日志清理轮转的框架。此外,还有部分应用因为特殊原因无法设置轮转。这些应用都需要对应的方案自动清理程序日志。本文以CentOS和Debian操作系统为例,介绍如何通过SAE控制台配置程序的日志清理。
实施方案
通过SAE控制台的自定义运行环境设置,安装并配置Crontab,达到定期清理的目的。您可以在创建或者部署应用时,填写自定义运行环境设置的相关参数。下图以ZIP包部署的PHP应用为例。
操作步骤
CentOS按最后操作时间清理
以下示例为每小时执行一次,对最后修改时间大于7天、以.log结尾的文件进行删除操作。
- 安装Crontab。 - #!/bin/bash set -o errexit set -o nounset set -o pipefail yum install -y crontab
- 添加待执行的定时任务表达式和命令。 - echo "0 * * * * root find /home/admin/logs/* -mtime +7 -name '*.log' -exec rm -rf {} \;">>/etc/crontab重要- 写入到/etc/crontab目录的内容中,一定要携带用户名(本示例为root)。 
- 启动Crontab。 - 展开应用生命周期管理设置区域,在启动后处理(PostStart设置)页签,输入Crontab的启动命令。 - /sbin/crond start 
Debian按最后操作时间清理
以下示例为每小时执行一次,对最后修改时间大于7天、以.log结尾的文件进行删除操作。
- 安装Crontab。 - #!/bin/bash set -o errexit set -o nounset set -o pipefail apt-get update apt-get install -y cron
- 添加待执行的定时任务表达式和命令。 - echo "0 * * * * root find /home/admin/logs/* -mtime +7 -name '*.log' -exec rm -rf {} \;">>/etc/crontab重要- 写入到/etc/crontab目录的内容中,一定要携带用户名(本示例为root)。 
- 启动Crontab。 - 展开应用生命周期管理设置区域,在启动后处理(PostStart设置)页签,输入Crontab的启动命令。 - service cron start 
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为*时,表示每分钟都要执行program,f2为*时,表示每小时都要执行程序,以此类推。
常见的Crontab表达式如下。
| 执行时间 | 格式 | 
| 每分钟定时执行一次 | * * * * * | 
| 每小时定时执行一次 | 0 * * * * | 
| 每天定时执行一次 | 0 0 * * * | 
| 每周定时执行一次 | 0 0 * * 0 | 
| 每月定时执行一次 | 0 0 1 * * | 
镜像补充
如果以镜像方式部署的应用,需要使用自定义运行环境设置的方式清理日志,您需要自行安装和启动Crontab命令,并将镜像源替换成阿里云的内网源。关于替换内网源的具体操作,请参见CentOS镜像。