[英]A Cron Job in Laravel 4
我需要一個Cron作業來執行一個Scraper到一個網站並發送帶有這些信息的電子郵件,我做了一個控制器來做到這一點,但當我設置命令來運行該文件
php app/controllers/ScraperController.php
我收到這個錯誤
PHP致命錯誤:第2行的/var/www/U-Scraper/app/controllers/ScraperController.php中找不到類'BaseController'
問題是,當我設置到該控制器的路由時,它可以工作
控制器不是自己運行的,它們是Laravel的一個組件。 如果你直接加載你的控制器,那么Laravel沒有加載,就PHP而言, BaseController
以及Laravel的Controller
類不存在。 通常,您的Web服務器會加載public/index.php
,它會加載Laravel等等。 如果這令人困惑,您可能想了解如何使用Composer進行自動加載: http : //net.tutsplus.com/tutorials/php/easy-package-management-with-composer/
你應該做的是編寫一個Artisan命令來完成你需要的命令並使用cron調用該命令。 這個問題提供了如何實現這一目標的詳細信息: Laravel中的Cron Job
我建議你創建新的Artisan命令而不是控制器。
然后設置CRON任務以運行您的命令,例如:
1 * * * * /usr/bin/php /path/to/the/artisan nameofthecustomcommand
如果您無法以這種方式運行/設置任務,但您可以設置要執行的URL
http://mydomain.com/cron.php
// cron.php
// I am aware I do use exec()
exec('php artisan nameofthecustomcommand');
更多關於Artisan命令的信息
有機會,您可以將整個控制器方法放入此命令而無需觸摸代碼;)
這是我使用Laravel 4和Artisan Command功能設置CRON作業的方式。
首先,使用Artisan創建一個新命令。 從命令行類型:
php artisan command:make FooCommand
在app/commands
文件夾中,您現在將擁有一個名為FooCommand.php
的新文件。
打開該文件並在函數fire()
編寫代碼。 每次運行命令時都會運行。 還有一些其他函數允許您從命令行捕獲參數和選項。
在您的命令文件中還有需要填寫的$name
和$description
變量。為您的任務提供一個很好的名稱和描述,如:
/**
* The console command name.
*
* @var string
*/
protected $name = 'command:my_foo_command';
/**
* The console command description.
*
* @var string
*/
protected $description = 'A description of what the command does';
完成后,您需要通過打開app/start/artisan.php
並添加以下內容將其注冊到Artisan:
Artisan::add(new FooCommand);
然后在命令行中使用Artisan,您可以使用以下命令運行任務:
php artisan command:my_foo_command
這只會調用一次命令 - 為了讓它定期運行,將以下內容添加到CRONTAB:
1 * * * * /usr/bin/php /path/to/the/artisan command:my_foo_command
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.