如何向 Elastic Beanstalk 环境的 Worker 级添加定期任务,并在定期任务不显示时对问题进行故障排除?

2 分钟阅读
0

我想向我的 AWS Elastic Beanstalk 环境的 Worker 级添加定期任务。我还想解决不显示的定期任务的问题。

解决方法

**注意:**Elastic Beanstalk 使用 aws-elasticbeanstalk-ec2-role Amazon Elastic Compute Cloud (Amazon EC2) 实例配置文件,其中包括 AWSElasticBeanstalkWebTierAWSElasticBeanstalkWorkerTierAWSElasticBeanstalkMulticontainerDocker 托管权限。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 级中,请完成以下步骤:

  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 进程守护程序通过端口 80http://localhost/ 发送的 HTTP POST 请求。进程守护程序在轮询队列项目时发送请求。
    您会看到类似于以下内容的消息:

    2019-07-05T13:54:52Z message: sent to http://localhost:80/
  4. 要确认 SQS 队列收到这些消息,请检查与 Worker 环境关联的队列的 NumberOfMessagesReceived Amazon CloudWatch 指标

  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 队列配置您的 Worker 环境,则定期任务不起作用。

相关信息

如何在 Elastic Beanstalk 环境中在 Amazon EC2 实例上创建 cron 作业?

AWS 官方
AWS 官方已更新 5 个月前