Я хочу периодически запускать контроллер CodeIgniter, используя планировщик заданий Windows, как задание cron. Я запустил автономный PHP-файл с помощью планировщика задач с этот метод, но не удалось реализовать это на контроллере CodeIgniter.
Вот мой контроллер:
<?php
defined("BASEPATH") OR exit("No direct script access allowed");
class Cron_test extends CI_Controller {
public $file;
public $path;
public function __construct()
{
parent::__construct();
$this->load->helper("file");
$this->load->helper("directory");
$this->path = "application" . DIRECTORY_SEPARATOR . "cron_test" . DIRECTORY_SEPARATOR;
$this->file = $this->path . "cron.txt";
}
public function index()
{
$date = date("Y:m:d h:i:s");
$data = $date . " --- Cron test from CI";
$this->write_file($data);
}
public function write_file($data)
{
write_file($this->file, $data . "\n", "a");
}
}
Я хочу бежать index()
метод периодически.
Любая помощь будет высоко оценена.
Сделайте ваш write_file () как закрытый или защищенный метод, чтобы запретить его использование в браузерах. Установите crontab на вашем сервере (если Linux, или Time Schedule, если Windows server). Используйте полный путь $path
(Т.е. $this->path = APPPATH . "cron_test" . DIRECTORY_SEPARATOR;
). Используйте двойную проверку, чтобы убедиться, что запрос cli выполнен.
Что-то вроде:
<?php
defined("BASEPATH") OR exit("No direct script access allowed");
class Cron_test extends CI_Controller
{
public $file;
public $path;
public function __construct()
{
parent::__construct();
$this->load->helper("file");
$this->load->helper("directory");
$this->path = APPPATH . "cron_test" . DIRECTORY_SEPARATOR;
$this->file = $this->path . "cron.txt";
}
public function index()
{
if ($this->is_cli_request())
{
$date = date("Y:m:d h:i:s");
$data = $date . " --- Cron test from CI";
$this->write_file($data);
}
else
{
exit;
}
}
private function write_file($data)
{
write_file($this->file, $data . "\n", "a");
}
}
Чем, на вашем сервере установлен crontab. Это может выглядеть примерно так:
* 12 * * * /var/www/html/index.php cli/Cron_test
(Этот будет действовать каждый день в полдень). Ссылка Cron на Ubuntu.
Других решений пока нет …