问题:
我有一个 Laravel 5.4 artisan 任务,我需要通过 cron 运行它 - 尽管命令和调度程序(显然)设置正确,但它并没有完成。
这是 Laravel、php、apache、linux 或 crontab 的问题吗?最好的诊断方法是什么?
背景
在默认(亚马逊 AMI)EC2 实例上,artisan 命令被正确定义,并/var/www/html/myproject/
在通过以下方式调用时从项目目录(即)完美运行:
php artisan mycommand:option1
Run Code Online (Sandbox Code Playgroud)
我已将此添加到如下所示的时间表中app/Console/Kernel.php
:
protected function schedule(Schedule $schedule)
{
Log::info('schedule:run');
$schedule ->command('mycommand:option1')
->dailyAt('07:00')
->emailOutputTo('email@email.com');
$schedule ->command('mycommand:option2')
->dailyAt('07:15')
->emailOutputTo('email@email.com');
}
Run Code Online (Sandbox Code Playgroud)
为apache
via添加了以下 cron 命令sudo crontab -u apache -e
:
* * * * * php /var/www/html/myproject/artisan schedule:run >> /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
为了确保这不是权限问题,我还为以下用户添加了相同的命令:
ec2-user
通过 crontab -e
root
通过 sudo crontab -e
系统输出
来自sudo tail -f …
我试图第一次使用调度程序来调用方法:
protected function schedule(Schedule $schedule)
{
$schedule->call('MyClassName@myMethodName')
->everyMinute();
}
Run Code Online (Sandbox Code Playgroud)
我正在调用的类是以App/Http/Controller
这种方式定义的:
namespace App\Http\Controllers;
use App\Http\Requests;
use App\Models\Reaction;
use View;
use Request;
class MyClassNameController extends Controller {
Run Code Online (Sandbox Code Playgroud)
但是每次调度程序运行时,它都会:
[ReflectionException]
Class MyClassName does not exist
Run Code Online (Sandbox Code Playgroud)
我怎么能解决这个问题?