如何通过CRON运行CodeIgniter文件?

2022-08-31 00:31:09

我过去尝试过以下方法:

<?php
set_time_limit(0);
$_SERVER['PATH_INFO'] = 'cron/controller/index';
$_SERVER['REQUEST_URI'] = 'cron/controller/index';
require_once('index.php');
?>

并将其放在 codeigniter 安装目录中的文件中,将其称为 cron.php,然后通过以下方式调用它:

php /home/[username]/public_html/my_project/cron.php

如果我在浏览器中键入cron.php的URL,它可以完美地工作,但是每当它通过CRON运行时,我都会收到404错误。将以下代码放入CodeIgniter的函数中show_404()

function show_404($page = '')
{
   print_r($_SERVER);
   echo "\n\n";
   die ($page);
}

导致通过电子邮件将以下输出发送给我:

Array
(
   [SHELL] => /bin/sh
   [MAILTO] => me@gmail.com
   [USER] => [me]
   [PATH] => /usr/bin:/bin
   [PWD] => /home/[me]
   [SHLVL] => 1
   [HOME] => /home/[me]
   [LOGNAME] => [me]
   [_] => /usr/bin/php
   [PHP_SELF] =>
   [REQUEST_TIME] => 1266479641
   [argv] => Array
       (
           [0] => /home/[me]/public_html/my_project/cron.php
       )

   [argc] => 1
   [PATH_INFO] => cron/controller/index
   [REQUEST_URI] => cron/controllers/index
)


home/[me]

在这里,我用[我]代替了我的实际用户名。

有什么想法吗?


答案 1

通过 CodeIgniter 运行 cron 的最简单方法是通过你的应用提供 cron URL。

然后通过 wget 调用它

wget -O - -q -t 1 http://www.example.com/cron/run

在控制器内部,您可以使用日志来确保cron不会运行得太频繁,即如果Google机器人错误地触发它。

第二种方法是使用猞猁

/usr/local/bin/lynx -source http://www.example.com/cron/run

答案 2

您可能还想添加 --spider 来忽略响应。这将阻止请求超时:

wget -O - -q -t 1 --spider http://www.example.com/cron/run

推荐