我过去尝试过以下方法:
<?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]
这里我[我]代替我的实际用户名。
有什么想法吗?
答案 0 :(得分:21)
通过CodeIgniter运行cron的最简单方法是通过您的应用程序提供cron URL。
然后通过wget
调用它wget -O - -q -t 1 http://www.example.com/cron/run
在控制器内部,您可以使用日志来确保cron不会经常运行,即如果Google机器人错误地触发它。
第二种方法是使用lynx
/usr/local/bin/lynx -source http://www.example.com/cron/run
答案 1 :(得分:5)
您可能还想添加--spider来忽略响应。这会停止请求超时:
wget -O - -q -t 1 --spider http://www.example.com/cron/run
答案 2 :(得分:4)
您可能还想查看一下:Cron job bootstrapper
这是一个简单的引导程序文件,可用于从命令行直接运行CodeIgniter控制器。对于使用CI控制器进行cron作业,这是一个非常简单和优雅的解决方案。它还支持日志记录。
答案 3 :(得分:2)
有一篇关于如何在命令行上运行CodeIgniter的wiki文章,但这对于需要通过终端与用户进行交互的应用程序更有用(也有一个库)。
http://codeigniter.com/wiki/CI_on_the_command_line/
使用wget这样做的一个好处是,您可以保护您的代码不被用户或机器人运行:
if(!empty($_SERVER['HTTP_HOST']))
{
show_error('Shove off hax0r!');
}
答案 4 :(得分:2)
如果你想通过运行url来运行cron作业,这是一篇很棒的文章
http://www.nbill.co.uk/documentation/setting-up-a-cronjob.html
答案 5 :(得分:0)
使用php-cli而不是php
例如:
/usr/bin/php-cli /home/CPANEL_USER/public_html/index.php cronJobs deleteNotifications