我想向我的 AWS Elastic Beanstalk 环境的 Worker 级添加定期任务。我还想解决不显示的定期任务的问题。
解决方法
**注意:**Elastic Beanstalk 使用 aws-elasticbeanstalk-ec2-role Amazon Elastic Compute Cloud (Amazon EC2) 实例配置文件,其中包括 AWSElasticBeanstalkWebTier、AWSElasticBeanstalkWorkerTier 和 AWSElasticBeanstalkMulticontainerDocker 托管权限。AWSElasticBeanstalkWorkerTier 是定期任务正常运行所必需的。
向 Worker 级添加定期任务
要向 Elastic Beanstalk 环境的 Worker 级添加定期任务,请在源代码的根目录中加入 cron.yaml 文件。
示例:
version: 1
cron:
- name: "schedule"
url: "/schedule"
schedule: "0 */12 * * *"
**注意:**在前面的示例中,schedule(计划)任务定期发送描述该任务的 Amazon Simple Queue Service (Amazon SQS) 消息。schedule(计划)任务每 12 小时将消息发送到队列开头。消息通过队列后,实例会接收到向“/schedule”端点发送 HTTP POST 请求的任务。
对定期任务的问题进行故障排除
如果您的定期任务在您添加后未出现在 Worker 级中,请完成以下步骤:
-
在您的 /var/log/aws-sqsd/default.log 文件中,检查是否有类似于以下内容的日志:
schedule-parser: Successfully loaded 1 scheduled tasks from file /var/app/current/cron.yaml .
-
在您的 /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
-
在您的 /var/log/aws-sqsd/default.log 文件中,检查 Amazon SQS 进程守护程序通过端口 80 向 http://localhost/ 发送的 HTTP POST 请求。进程守护程序在轮询队列项目时发送请求。
您会看到类似于以下内容的消息:
2019-07-05T13:54:52Z message: sent to http://localhost:80/
-
要确认 SQS 队列收到这些消息,请检查与 Worker 环境关联的队列的 NumberOfMessagesReceived Amazon CloudWatch 指标。
-
要手动调用计划任务,请运行以下命令:
curl -d param1=value1 -d param2=value2 -H "Content-Type: application/json" -X POST http://localhost/scheduled-task-path
-d (--data) 标志可以保存您尝试传递给定期任务的数据。
**注意:**如果您使用 Amazon SQS FIFO 队列配置您的 Worker 环境,则定期任务不起作用。
相关信息
如何在 Elastic Beanstalk 环境中在 Amazon EC2 实例上创建 cron 作业?