Laravel 5.3队列无法在共享主机

时间:2016-12-28 10:38:40

标签: php laravel cron laravel-5.3 laravel-queue

在我的Laravel 5.3。*应用程序中,我正在后台运行队列。这在我的本地机器上完全正常。但是当它在服务器(共享主机)上生效时,它根本不起作用。

以下是该方案:

  1. 管理员正在提交管理生成器表单数据。

  2. 数据已插入数据库。

  3. 拍摄有关相同内容的电子邮件。

  4. 所以,为了让这个功能顺利进行,我在服务器的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个小时,我找不到任何解决方案。

    非常感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

你应该将cron编辑成这样的

* * * * * /usr/local/bin/php /home/<username>/laravel-app/artisan schedule:run >/dev/null 2>&1