已解决 - 在 EC2 中的 docker 容器内运行 cron 计划任务

问题描述 投票:0回答:1

我试图每分钟运行一次

php artisan schedule:run
,但似乎无法运行计划的任务。 我的 laravel 代码部署到 AWS EC2 实例内的 docker 容器中。

以下是相关信息:

app/Console/Kernel.php

protected function schedule(Schedule $schedule): void
  {
    $schedule->command('app:some-command')->everyMinute();
  }

app/Console/Commands/SomeCommand.php

    public function handle()
    {
        // some code
            try {
                // do something
            } catch (\Throwable $e) {
                Log::error($e->getMessage());
            }
    }

php artisan schedule:list

  * * * * *  php artisan app:some-command .....

crontab -e

// have tried the following
* * * * * php /var/www/html/artisan schedule:run >> /dev/null 2>&1
* * * * * cd /var/www/html/ && php artisan schedule:run >> /dev/null 2>&1

我参考了官方的doc

php artisan schedule:run
php artisan app:some-command
都按预期工作。

有人可以给我一些关于我在这里可能做错的事情的想法吗?

laravel docker cron
1个回答
0
投票

我想你有一个 docker 文件来创建你的 php 图像。我们将其命名为app.dockerfile。在里面你应该有这样的东西(虽然我已经使用了 Octane,但我认为它适用于 php 图像):

FROM phpswoole/swoole:4.8-php8.2-alpine
.
.
.
RUN touch app.cron && \
    echo "* * * * * php /app/artisan schedule:run" >> app.cron && \
    crontab app.cron

EXPOSE 8000

那么你应该有一个单独的容器来存放你的 cron 作业。所以你有一个 docker-compose 文件。在 docker-compose 文件中,您应该定义如下命令:

      command: [ "/bin/sh","-c" ]
      args:
        - |
          php artisan optimize &&
          php artisan event:cache &&
          crond -l 2 -f
© www.soinside.com 2019 - 2024. All rights reserved.