簡體   English   中英

Laravel 4中的Cron工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM