如何将定期任务添加到 Elastic Beanstalk 环境的工作线程层,并对未能添加的定期任务进行问题排查?

上次更新时间:2023 年 1 月 25 日

我想将定期任务添加到 AWS Elastic Beanstalk 环境的工作线程层。

解决方法

注意:Elastic Beanstalk 使用 aws-elasticbeanstalk-ec2-role 实例配置文件角色。这包括托管权限 AWSElasticBeanstalkWebTierAWSElasticBeanstalkWorkerTierAWSElasticBeanstalkMulticontainerDockerAWSelasticBeanStalkWorkerTier 是定期任务正常运行所必需的。有关更多信息,请参阅管理 Elastic Beanstalk 实例配置文件

将定期任务添加到工作线程层

要将定期任务添加到 Elastic Beanstalk 环境的工作线程层,请在源代码的 root 目录下添加 cron.yaml 文件。例如:

version: 1
cron:
 - name: "schedule"
   url: "/schedule"
   schedule: "0 */12 * * *"

注意:在前面的示例中,计划任务定期发送描述该任务的 Amazon Simple Queue Service (Amazon SQS) 消息。计划任务每 12 小时向队列头发送一次消息。消息遍历队列后,实例会将任务拾取到 HTTP POST“/schedule”端点。

如果工作线程层中仍未显示定期任务,请完成以下排查定期任务的问题部分中的步骤。

排查定期任务的问题

1.    在您的 /var/log/aws-sqsd/default.log 平台文件中,检查是否有类似于以下内容的日志:

schedule-parser: Successfully loaded 1 scheduled tasks from file /var/app/current/cron.yaml .

2.    在您的 /var/log/aws-sqsd/default.log 文件中,确认 Amazon SQS 进程守护程序是否正在运行并轮询正确的队列。

如果 Amazon SQS 进程守护程序正确启动,则您会看到与以下内容类似的日志:

2023-01-17T03:28:31Z init: initializing aws-sqsd 3.0.4 (2022-03-18)
2023-01-17T03:28:31Z schedule-parser: Successfully loaded 1 scheduled tasks from file /var/app/current/cron.yaml .
2023-01-17T03:28:31Z leader-election:  initialized leader election
2023-01-17T03:28:31Z scheduler: initialized 1 job's pending time
2023-01-17T03:28:31Z pollers: start initializting poller timer...
2023-01-17T03:28:31Z pollers: start auto running poller...
2023-01-17T03:28:31Z leader-election:  Starting leader election
2023-01-17T03:28:31Z leader-election:  current role: worker
2023-01-17T03:28:31Z scheduler: Starting scheduler
2023-01-17T03:28:31Z start: polling https://sqs.us-east-1.amazonaws.com/111122223333/yourWorkerQueue

3.    在您的 /var/log/aws-sqsd/default.log 文件中,检查 Amazon SQS 进程守护程序向端口 80 上的 http://localhost/ 发送的 HTTP POST 请求。当进程守护程序轮询队列项目时,它会发送请求。

您会看到一条类似于以下内容的消息:

2019-07-05T13:54:52Z message: sent to http://localhost:80/

4.    要确认 Amazon SQS 队列是否收到消息,请查看与工作线程环境关联的队列的 NumberOfMessagesReceived

5.    要手动调用计划的任务,请运行以下命令:

curl -d param1=value1 -d param2=value2 -H "Content-Type: application/json" -X POST http://localhost/scheduled-task-path

-d (--data) 标志可以保存您要传递到定期任务的数据。

注意:定期任务不适用于配置了 Amazon SQS FIFO(先进先出)队列的工作线程环境。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?