我创建了一个示例计划作业,以便在Laravel 5.2中的特定时间之后运行。这在localhost
到artisan
命令上运行正常。
我在本地服务器上运行此命令:
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!');
}
}
答案 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或其他托管平台
在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
中所定义。