在我的Laravel 5.3。*应用程序中,我正在后台运行队列。这在我的本地机器上完全正常。但是当它在服务器(共享主机)上生效时,它根本不起作用。
以下是该方案:
管理员正在提交管理生成器表单数据。
数据已插入数据库。
拍摄有关相同内容的电子邮件。
所以,为了让这个功能顺利进行,我在服务器的cPanel上创建了一个cron作业。
这是cron的工作:
/usr/local/bin/php /home/<username>/laravel-app/artisan schedule:run >/dev/null 2>&1
这是app/Console/Kernel.php
文件内容
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
// $schedule->command('inspire')
// ->hourly();
$schedule->command('queue:work --daemon --tries=3')
->everyMinute()
->withoutOverlapping();
}
我还通过运行
为作业创建了数据库php artisan queue:table;
php artisan queue:failed-table;
php artisan migrate;
生成/插入管理员时,会触发一个事件:
event(new AdministratorHasBeenGenerated($user, $request->password));
会向所提供的电子邮件ID(app/Listeners/AdministratorHasBeenGenerated/SendWelcomeEmail.php
)
/**
* Handle the event.
*
* @param AdministratorHasBeenGenerated $event
* @return void
*/
public function handle(AdministratorHasBeenGenerated $event)
{
Mail::to($event->administrator->email)
->queue(new GeneratedMail($event->administrator, $event->password));
}
这是.env文件中的邮件配置
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=correct_username
MAIL_PASSWORD=correct_password
MAIL_ENCRYPTION=null
我没有收到任何错误或相关信息,但即使我提供了正确的电子邮件ID,也没有收到任何欢迎电子邮件。
更新1:2017年12月21日
这是只是一个解决方法,因为我找不到这个问题的实际解决方案。我所做的是为了只运行队列创建了另一个cron作业..
/usr/local/bin/php /home/<username>/laravel-app/artisan queue:work --daemon --tries=3 >/dev/null 2>&1
这将每分钟触发一次命令queue:work
(或者你在cPanel的cron jobs选项卡中设置的任何内容)..
上述解决方案不正确,我猜..更正/修正是最受欢迎的。
任何人都可以指出我必须做的地点和行为的错误吗?已经超过4个小时,我找不到任何解决方案。
非常感谢任何帮助。感谢。
答案 0 :(得分:0)
你应该将cron编辑成这样的
* * * * * /usr/local/bin/php /home/<username>/laravel-app/artisan schedule:run >/dev/null 2>&1