Как я могу использовать задание cron в cakephp для вызова действия контроллера на Ubuntu, Я пытаюсь сделать это через crontab, но он не работает?
Как настроить cronjobs в cake php?
Ответ 1
Использовать оболочку
"Cake Way" использования приложения CakePHP в заданиях cron будет создавать оболочку, а затем называть ее как задание cron.
то есть. Создайте оболочку для выполнения задачи, а затем добавьте ее в crontab (crontab -e
на машине linux):
0 * * * * cd /path/to/app/ && Console/cake your_shell_name params
Создание оболочек и с их использованием cron содержится в документации.
Ответ 2
Поскольку нам не нужен слой View MVC, я также предлагаю использовать оболочку Cake вместо записи в обычных контроллерах. Это также уменьшит нагрузку на память различных функций обратного вызова контроллеров, таких как beforeFilter, beforeRender и др.
Затем сделайте запись на вкладке ** nix cron для корон, написанных на вашем CakeShells.
Ответ 3
Это можно сделать очень легко, выполнив следующие шаги:
1) Создайте оболочку, скажем, HelloShell.php в консоли /Command
<?php
class HelloShell extends AppShell
{
public function main()
{
//Your functionality here...
}
}
?>
Эта оболочка может быть вызвана с помощью консоли /cake hello
2) Напишите команду crontab-e
. Это откроет редактор по умолчанию или редактор, который вы выберете
Теперь, когда мы хотим, чтобы наша оболочка запускалась через каждые 5 минут, пишите: -
*/5 * * * * /PATH TO APP/Console/cake hello
Для лучшего понимания см. https://www.youtube.com/watch?v=ljgvo2jM234
3) Если вы хотите вызвать действие контроллера в Shell, просто импортируйте этот конкретный контроллер, скажем, AppController на App::uses('AppController', 'Controller');
Теперь создайте объект AppController в оболочке
$object =new AppController();
$object->func_in_controller();
Теперь параметры функции можно получить в оболочке $object->func_param;
Спасибо!
Ответ 4
Вы можете создать задания cron, напрямую вызывающие URL:
php -f http://yoursite.com/yourController/yourAction/params > /dev/null
Или вы можете сделать это также с относительными путями:
php -f CakePHP/yourController/yourAction/params > /dev/null
Вы можете посмотреть, как использовать cron
для unix здесь.
В любом случае, я рекомендую использовать CakePHP Shell, если действие будет доступно только из заданий cron, а не для любого другого пользователя по URL-адресу.
У вас есть дополнительная информация о том, как вызвать Cake Shell из заданий cron в документации CakePHP.