Laravel Cronjob运行方法内部的内容

时间:2018-09-04 17:36:23

标签: php laravel laravel-5

在我的控制器中,我有以下方法可以检查网址状态

public function index(){
    $url = Url::latest()->paginate();
    return UrlsResource::collection($url);
}

我的UrlsResource返回这样的数据

public function toArray($request)
{
    return [
        'id' => $this->id,
        'url' => $this->url,
        'status' => $this->status,
        'created_at' => Carbon::parse($this->created_at)->format('Y-m-d'),
     ];
}

$this->status中是我的模型的访问者。

public function getStatusAttribute(){ 
    $handle = curl_init($this->url);
    curl_setopt($handle,  CURLOPT_RETURNTRANSFER, TRUE);
    $response = curl_exec($handle);
    $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
    curl_close($handle);
    $message = [
        '100' => '(100) Continue '. $this->url, 
        '101' => '(101) Switching Protocols '. $this->url, 
        '102' => '(102) Processing '. $this->url, 
     ];
    return $message[$httpCode];
}

如何运行cronjob,以便在其中运行索引方法中的内容?

我试图在其中输入命令

class CheckUrl extends Command
{
protected $signature = 'check:url';
protected $description = 'Check url';

    public function __construct()
    {
        parent::__construct();
    }

    public function handle()
    {
        $url = Url::latest()->paginate();
        UrlsResource::collection($url);
    }
}

我试图通过命令行运行它

php artisan check:url

但什么都没发生

在将此cron条目添加到服务器的文档中说

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

但是我不知道确切的位置(我使用xampp)

2 个答案:

答案 0 :(得分:0)

您可以将controller @ method作为字符串传递给call()。

$schedule->call('App\Http\Controllers\MyController@MyAction')->everyMinute();

答案 1 :(得分:-1)

您可以像这样从控制器调用调度程序的任何方法

$schedule->call('App\Http\Controllers\yourController@index')->everyMinute()

但是您需要将调度程序命令添加到corntab中,以便可以执行任务。

在终端中运行

crontab -e

并通过此命令

 * * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1