如何在hostgator托管服务器cpanel上的cron作业上运行laravel 5.2 artisan命令?

时间:2016-08-06 12:37:38

标签: php cron laravel-5.2

我创建了一个示例计划作业,以便在Laravel 5.2中的特定时间之后运行。这在localhostartisan命令上运行正常。

我在本地服务器上运行此命令: php artisan Demo:Cron

现在我在HostGator托管服务器上的cPanel的高级选项cron作业中添加此任务。但它没有用。

这是我正在尝试的命令:

cd /home/pofindia/public_html/beta-var1/ && /usr/local/bin/php artisan Demo:Cron

Php版本:5.4默认。 这是我的示例文件

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use DB;

class DemoCron extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'demo:cron';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        DB::table('items')->insert(['name'=>'hello new']);
        $this->info('Demo:Cron Cummand Run successfully!');
    }
}

5 个答案:

答案 0 :(得分:2)

运行

which php

查看php可执行文件的位置,复制该路径。

crontab -e

(我假设这是您工匠所在的项目根 / home / pofindia / public_html / beta-var1 / ,但这需要您添加工匠,因此的 /家庭/ pofindia /的public_html /β-类VAR1 /人员

添加crontab条目

* * * * * /usr/local/bin/php  /home/pofindia/public_html/beta-var1/artisan Demo:Cron

你真正在这里做的就是提供绝对路径

答案 1 :(得分:1)

以下是我对其进行测试并可以正常工作的快速介绍。它将适用于cpanel或其他托管平台

  1. 创建一条名为/ mycron的路由,并将其指向一个名为“ myCronMethod”的控制器方法。
  2. 在myCronMethod内部,按如下所示调用命令

    Artisan :: call(“ cache:clear”);

    或您的命令,即

    Artisan :: call(“ Demo:Cron”);

//确保按如下所示使用顶部的工匠外观

use Illuminate\Support\Facades\Artisan;

3。然后,您现在可以将cron设置为调用刚刚创建的上述路由,即

* / 5 * * * * curl --request GET'http://myapplication.com/mycron

* / 5 * * * * / usr / bin / php -q / home / CpanelUsername / public_html / myapplication / mycron

简化样本 //路线

Route::get('/mycron', ['uses'=>'MyController@myCronMethod']);

//控制器

use Illuminate\Support\Facades\Artisan;

class MyController extends Controller
{

    public function myCronMethod(){
        Artisan::call("cache:clear");
        Artisan::call("Demo:Cron");
    }

}

答案 2 :(得分:0)

请HostGator将MAILTO="your@email.com"添加到您的cron假脱机中。

然后,让它运行,并查看它是否给您任何输出错误。

如果您收到一封电子邮件,说明“ Demo:Cron Cummand成功运行!”那么你知道它有用

如果您收到一封其他说明的电子邮件,请通过票证/聊天报告错误,他们应该能够帮助您修复PHP /工匠的执行情况。

我可能要说的一件事是在cron中进行cd ~/public_html/beta-var1调用之前先php artisan demo:cron,而不是指定绝对路径。确保您的Cron中没有&>/dev/null或任何隐藏或重定向STDOUT / STDERR的东西。工作完成后,您可以通过删除$this->info();调用

来抑制输出

答案 3 :(得分:0)

您可以通过此artisan命令手动执行cron作业

php artisan schedule:run

答案 4 :(得分:0)

像Laravel 5.2中的命令名称一样,它们区分大小写。

我刚刚尝试过全新的Laravel 5.2安装:

$ php artisan Demo:Cron

[Symfony\Component\Console\Exception\CommandNotFoundException]  
There are no commands defined in the "Demo" namespace.          

Did you mean this?                                              
    demo                                                        

位置:

$ php artisan demo:cron
Demo:Cron Command Run successfully

因此,解决方案是使用demo:cron,如在命令的$signature中所定义。