禅道管理系统的定时任务 代码

本文讲述了作者在遇到禅道管理系统因自动备份导致存储空间不足的问题后,深入研究禅道定时任务执行机制的过程。虽然最初怀疑是crontab负责,但发现crontab中并无相关设置。通过对禅道代码的分析,揭示了禅道如何在服务端启动一个死循环以执行定时任务,且该任务依赖于客户端发起的HTTP请求触发。
摘要由CSDN通过智能技术生成

禅道管理系统里面有一些定时任务的,例如更新燃尽图,定时备份数据库等。

昨天我发现禅道不能登录了,检查了一下发现禅道所在的目录没有空间了,排查了一下发现是禅道的定时任务每天备份数据库文件还有上传的附件,由于附件很大所以每天都占用大量的存储空间。


然后我删掉了那些多余的备份,另外想禁用掉禅道的自动备份。然后问题来了


禅道的定时任务是如何执行的呢?

首先想到的是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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值