服务部署到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镜像。