【问题标题】:Elastic Beanstalk Extensions: When does a command complete?Elastic Beanstalk 扩展:命令何时完成?
【发布时间】:2019-07-19 12:46:12
【问题描述】:

我有一个 AWS Elastic Beanstalk 设置,其中包含一些 .ebextensions 文件和一些 container_commands。这些命令之一是脚本。脚本完成,但下一个命令没有运行。

$ pstree -p | grep cfn-
        |-cfn-hup(2833)-+-command-process(10161)---command-process(10162)-+-cfn-init(10317)---bash(10428)
$ ps 10317
  PID TTY      STAT   TIME COMMAND
10317 ?        S      0:00 /usr/bin/python2.7 /opt/aws/bin/cfn-init -s arn:aws:cloudformation:us-east-1:278460835609:stack/awseb-e-4qwsypzv7u-stack/f8ab55f0-393c-11e9-8907-0ae8cc519968 -r AWSEBAutoScalingGroup --region us-east-1 --configsets Infra-EmbeddedPostBuild
$ ps 10428
  PID TTY      STAT   TIME COMMAND
10428 ?        Z      0:00 [bash] <defunct>

如您所见,我的脚本是一个缺陷僵尸,但 cfn-init 并没有为它进行 wait(2) 系统调用。

当我从命令行运行脚本时,它会正确终止。

我不得不假设cfn-init 正在获得SIGCHLD。为什么不等待(2)继续前进?

另外,有没有更好的方法来调查这个?我一直在查看正在运行的进程并阅读完全没有帮助的 /var/log/eb-* 日志。

FWIW,脚本很简单:

#!/usr/bin/env bash
mkfifo ~ec2-user/fifo
nohup ~ec2-user/holdlock.sh &
read < ~ec2-user/fifo

nohups 的事情很简单:

#!/usr/bin/env bash
(echo 'select pg_advisory_lock(43110);';sleep 10m) |
  PGPASSWORD=$RDS_PASSWORD psql -h $RDS_HOSTNAME -d $RDS_DB_NAME -U 

$RDS_USERNAME | tee ~ec2-user/nhlog > ~ec2-user/fifo

【问题讨论】:

    标签: amazon-web-services amazon-elastic-beanstalk ebextensions


    【解决方案1】:

    对此的解决方法是将一系列命令移动到单个 shell 脚本中,并将其作为单个命令调用。这仍然不能解释 ebextensions 的实际作用,但它让我继续前进。

    【讨论】:

      猜你喜欢
      • 2014-03-14
      • 2018-01-24
      • 2015-06-11
      • 2012-01-10
      • 2019-04-03
      • 2018-05-25
      • 2015-09-15
      • 2020-10-23
      • 2013-07-30
      相关资源
      最近更新 更多