如何调试cron job - codeigniter 3

时间:2017-01-11 01:50:45

标签: php mysql codeigniter cron

我的cron作业正在从godaddy共享服务器中正确触发:

wget `http://www.domain/APP/index.php?/cron_jobs/cron_job_TEST`

cron结果中没有返回错误:

HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: `index.php?%2Fcron_jobs%2Fcron_job_TEST'

我将测试设置为写入文本文件 - 并写入数据库表。

当我测试时 - 访问网址 - http://www.domain/APP/index.php?/cron_jobs/cron_job_TEST 正确写入文本文件和表。

但是当cron运行时 - 文本文件或数据库表没有结果。

CONTROLLER / FUNTION'cron_jobs / cron_job_TEST':

// CRON_1
    public function cron_job_TEST(){

        file_put_contents("test_cron_job.txt", "cron_job_TEST-> ".date('l jS \of F Y h:i:s A') . "\n", FILE_APPEND);


        $this->db->query("INSERT INTO `TEST_CRON` (`ID`, `DATE`) VALUES ('', NOW());");


    }// END CRON_1

我也没试过/web/cgi-bin/php5 $HOME/html/方法。 我认为wget的意思是它的行为就像你正在访问URL一样。

这里可能出现什么问题?

如何调试?

1 个答案:

答案 0 :(得分:3)

您应该通过在codeigniter的index.php文件中调用PHP直接从命令行执行命令,而不是使用wget从Web服务器获取文件:

php /path/to/your/project/html/index.php cron_jobs/cron_job_TEST

如果以这种方式执行codeigniter应用程序,您应该能够看到输出以及在执行期间可能冒出的错误。

我还建议您从cron方法编写日志文件,以便输出值,如果您聪明,请确保代码的哪些分支正在执行。

编辑:你可能也会改变你的cron作业,无论你选择哪种方法,都可以将cron作业的输出路由到一个文件中,这样你就可以对丢失的内容有所了解:

wget `http://www.domain/APP/index.php?/cron_jobs/cron_job_TEST` > /path/to/file.txt

编辑:我认为您也可以将stderr和stdout路由到同一个文件中

wget `http://www.domain/APP/index.php?/cron_jobs/cron_job_TEST` &> /path/to/file.txt

显然,拥有此cron作业的用户必须具有写入该输出文件的权限(如果该文件已存在)或者如果该文件不存在则必须具有写入该目录的权限。

一旦cron作业运行,你就可以查看这个文件并更好地了解发生的事情。