我正在将 Laravel 应用程序部署到 ElasticBeanstalk 环境。我正在尝试在服务器上的计划任务中运行命令。但它不起作用。这就是我所做的。
我在 Kernel.php 文件中安排命令如下。
$schedule->command('counter:update')->everyMinute()->onOneServer();
我正在使用 Redis 作为我的缓存驱动程序,它正在工作。
然后我尝试了两种不同的方法。
第一种方法:使用 Laravel AWS Worker 包, https://packagist.org/packages/dusterio/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"