禅道管理系统里面有一些定时任务的,例如更新燃尽图,定时备份数据库等。
昨天我发现禅道不能登录了,检查了一下发现禅道所在的目录没有空间了,排查了一下发现是禅道的定时任务每天备份数据库文件还有上传的附件,由于附件很大所以每天都占用大量的存储空间。
然后我删掉了那些多余的备份,另外想禁用掉禅道的自动备份。然后问题来了
禅道的定时任务是如何执行的呢?
首先想到的是crontab,因为禅道官网提供了一些脚本用来做这些操作的,它就生成了一些sh脚本,需要添加到cron里面,然后就可以定时执行了
问题是我检查了所有用的crontab,发现并没有禅道的任何定时任务项目。
这引起了我的好奇心,我决定追入禅道的代码看看究竟是什么原因使得禅道有了自动定时任务的功能
/**
* Ajax exec cron.
*
* @access public
* @return void
*/
public function ajaxExec()
{
ignore_user_abort(true);
set_time_limit(0);
session_write_close();
/* Check cron turnon. */
if(empty($this->config->global->cron)) die();
/* make cron status to running. */
$configID = $this->cron->getConfigID();
$configID = $this->cron->markCronStatus('running', $configID);
/* Get and parse crons. */
$crons = $this->cron->getCrons('nostop');
$parsedCrons = $this->cron->parseCron($crons);
/* Update last time. */
$this->cron->changeStatus(key($parsedCrons), 'normal', true);
$this->loadModel('common');
$startedTime = time();
while(true)
{
/* When cron is null then die. */
if(empty($crons)) break;
if(empty($parsed