我有一个laravel项目,我创建了一个命令来做某事。我的目标是每分钟运行一次命令,因此我将命令添加到计划中。如果在本地服务器上运行
php artisan的时间表:运行 可以,但是只有一次。
所以我上载我的服务器项目并在CPanel中创建Cron作业,但出现错误
PHP致命错误:找不到类'Illuminate \ Console \ Command'
Cron作业中的命令
/ usr / bin / php /path-to-project/app/Console/Commands/Notification.php
我不明白为什么我可以在本地服务器上运行命令,但不能在在线服务器上运行。
有人可以帮助我吗?
答案 0 :(得分:0)
内核是什么样的?它至少应该看起来像这样:
protected function schedule(Schedule $schedule) {
$schedule->command('artisanCommandNameHere')->everyMinute();
}
就个人而言,我还要在末尾添加->withoutOverlapping()
,以防止同时执行。
这些文档应为您提供帮助:https://laravel.com/docs/5.8/scheduling
更新:
我只是再次看了一下,就意识到所提供的信息是正确的,这个问题与我所想的不同。首先,为什么不让Laravel调度程序处理cron作业?该命令的全部目的是消除手工制作cron工作的不必要的复杂性。使用上面的块作为调度功能,仅在服务器上运行php artisan schedule:run
时,作业将按照指定的顺序重复。
但是,如果您沉迷于自己创建cron作业,那么您将丢失命令中的工匠部分。您需要在php和文件名之间添加它,如下所示:
usr/bin/php /path-to-project/artisan /path-to-project/app/Console/Commands/Notification.php
Artisan是其自己的基于Symfony的CLI,Laravel中的命令旨在通过它运行,而不是作为基本的php文件运行。