AWS上的Laravel计划任务无法正常工作

Wai Yan Hein

我正在将Laravel应用程序部署到ElasticBeanstalk环境。我正在尝试在服务器上的“调度任务”中运行命令。但这是行不通的。这就是我所做的。

我将命令安排在Kernel.php文件中,如下所示。

$schedule->command('counter:update')->everyMinute()->onOneServer();

我正在使用Redis作为我的缓存驱动程序,它正在运行。

然后,我尝试了两种不同的方法。

第一种方法:使用Laravel AWS Worker软件包https ://packagist.org/packages/dusterio/laravel-aws-worker

我按照文档中提到的说明安装了软件包。

然后,我将CSRF中间件中的文档中提到的工作路由列入白名单。

然后,我在项目的根文件夹中创建了一个cron.yml文件,内容如下。

version: 1
cron:
  - name: "schedule"
    url: "/worker/schedule"
    schedule: "* * * * *"

然后,我部署了我的应用程序。但是计划任务无法正常工作。因此,我尝试了以下第二种方法。

第二种方法:使用Crontab

我创建了一个.ebextensions / cronjob.config文件,其中包含以下内容。

files:
    "/etc/cron.d/schedule_run":
        mode: "000644"
        owner: root
        group: root
        content: |
            * * * * * root . /opt/elasticbeanstalk/support/envvars && /usr/bin/php /var/www/html/artisan schedule:run 1>> /dev/null 2>&1

commands:
    remove_old_cron:
        command: "rm -f /etc/cron.d/*.bak"

然后,我部署了我的应用程序。第二种方法也不起作用。我的配置中缺少什么?如何使它正常工作?

这是我的另一个cronjob.config文件。

files:
    "/etc/cron.d/mycron":
        mode: "000644"
        owner: root
        group: root
        content: |
            * * * * * root /usr/local/bin/myscript.sh

    "/usr/local/bin/myscript.sh":
        mode: "000755"
        owner: root
        group: root
        content: |
            #!/bin/bash

            date > /tmp/date
            * * * * * root . /opt/elasticbeanstalk/support/envvars && /usr/bin/php /var/www/html/artisan schedule:run 1>> /dev/null 2>&1

            exit 0

commands:
    remove_old_cron:
        command: "rm -f /etc/cron.d/mycron.bak"
马辛

cron.yml你尝试只对工人的环境

/opt/elasticbeanstalk/support/envvars只对是亚马逊的Linux 1由于您正在使用64bit Amazon Linux 2 v3.0.3 running PHP 7.3(我记得),cron会出错。

因此,您应该专注于第二种方法,该方法与AWS博客有关如何在AL2上使用cron一致:

因此,我建议cron通过/usr/local/bin/myscript.sh博客中所示的脚本(例如执行作业

的内容已修改/usr/local/bin/myscript.sh

您只能尝试仅date > /tmp/date检查cron作业是否有效。为此,您必须部署应用程序,并检查是否/tmp/date包含此脚本生成的时间。

    "/usr/local/bin/myscript.sh":
        mode: "000755"
        owner: root
        group: root
        content: |
            #!/bin/bash

            date > /tmp/date

            # the line below is commented out.
            #/usr/bin/php /var/www/html/artisan schedule:run 1>> /dev/null 2>&1

            exit 0

访问Amazon Linux 2中的环境变量

env变量存储在 /opt/elasticbeanstalk/deployment/env

因此,要将它们加载到脚本中,可以使用以下命令:

env $(cat /opt/elasticbeanstalk/deployment/env | xargs) sh -c '/usr/bin/php /var/www/html/artisan schedule:run 1>> /dev/null 2>&1'

或两行

export $(cat /opt/elasticbeanstalk/deployment/env | xargs) 
/usr/bin/php /var/www/html/artisan schedule:run 1>> /dev/null 2>&1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章