最近,有个应用每隔几天就502,提示错误信息 “error: file write error (Disk quota exceeded)”,看来又是挤满了空间,超出了配额。后来发现是因为程序的不完善,php 给出了很多的警告,并将这些信息写入到目录~/php-5.3/logs 里面。所以隔了一段时间应用又会到达配额限制,而解决方法就是手动清理这些庞大的日志文件。 既然知道了问题,那么就好解决了,为了偷懒,还是动用OpenShift 的定时任务吧,之前不是提到《小记配置OpenShift 网站数据和Mysql 数据库到Dropbox的自动备份》吗,那么我们只需按照同样的思路制作一个定时清理日志的cron即可。 首先添加一个cartridge (rhc app cartridge add -a $app -c cron-1.4 ) 到应用下,然后添加一个日常任务到.openshift/cron/daily/cleanup-old-logs 就可以了。 下面是脚本内容,例子中是保存180 天内的日志文件,这个根据需要可以自己修改:

cd $OPENSHIFT_PHP_LOG_DIR

find . -type f \( -name access_log-\ , -name error_log-\ \) -mtime +180

Add this to the above command to backup as a gzipped tarball: | xargs tar -czvf backup-logs-$(date +%Y%m%d).tar.gz

Add this to the above command to delete ‘em: -exec rm {} \; or | xargs rm)

如我的设置为:

find . -type f \( -name access_log-\ , -name error_log-\ \) -mtime +3 -exec rm {} \;

关于find 的语法,需要的朋友可参考《收集整理了一下linux下find命令的用法

Comments