我想将定期任务添加到 AWS Elastic Beanstalk 环境的工作线程层。
解决方法
**注意:**Elastic Beanstalk 使用 aws-elasticbeanstalk-ec2-role 实例配置文件角色。这包括托管权限 AWSElasticBeanstalkWebTier、AWSElasticBeanstalkWorkerTier 和 AWSElasticBeanstalkMulticontainerDocker。AWSelasticBeanStalkWorkerTier 是定期任务正常运行所必需的。有关更多信息,请参阅管理 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(先进先出)队列的工作线程环境。
相关信息
如何在 Elastic Beanstalk 环境中的 Amazon EC2 实例上创建 cron 作业?
定期任务