我正在编写一个cron作业函数,我的项目是基于CodeIgniter framework
构建的。以下是身份验证服务器中的控制器类(Cron.php
)。
class Cron extends CI_Controller {
public function log_update() {
$opts = array('http' =>
array(
'method' => 'GET',
'timeout' => 10
)
);
$context = stream_context_create($opts);
$url = "http://lamp.co.uk/project/data_controller/get_log_update";
$contents = file_get_contents($url, TRUE, $context);
var_dump($contents);
}
}
下面是我的项目服务器中的Data_controller
类。
class Data_controller extends MY_Controller {
public function __construct() {
parent::__construct();
echo "hi ";
}
public function get_log_update() {
echo "welcome";
}
}
当我从auth-server命令行执行php index.php cron log_update
时,只显示字符串"hi",而不是"hi welcome"。
但当我在Data_controller构造函数中调用$this->get_log_update()
时,以及当我直接从浏览器访问url时,它都能工作
我做了什么傻事吗?还是有更大的问题。
这可能与CLI问题有关。
首先看看如果使用php-cli index.php cron log_update
而不是php index.php cron get_log_update()
会发生什么(只需添加-cli)。
如果这不起作用,请尝试将echo
包装在if (is_cli())
语句上,看看会发生什么。实际上,在else到if上尝试echo "inside cli"
和另一个echo "not cli"
,以便获得更多关于正在发生的事情的提示。
请告诉我这是否有帮助。
EDIT这里有一个is_cli:的工作示例
class Rutinas extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->database();
// html y url autoloaded
if (is_cli()) {
$this->load->model('Trips_model');
echo "ejecutando cronjob...'r'n";
} else {
echo "creo que has perdido el camino...";
}
}
//redirect if needed, otherwise display the user list
function index()
{
if (is_cli())
{
$viajes_por_archivar = $this->Trips_model->trips_to_update();
echo "Viajes archivados:'t".$update_past_trips_result;
echo "'r'n";
echo "Acuerdos archivados:'t".$update_lost_deals_result;
} else {
echo " en el index";
// $this->output->enable_profiler(TRUE);
// phpinfo();
}
}
}