Elastic Beanstalk Extensions: Когда команда завершается? - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть установка 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

И вещь, которую он не делает, довольно проста:

#!/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

1 Ответ

0 голосов
/ 26 февраля 2019

A обходной путь , для этого необходимо переместить последовательность команд в один сценарий оболочки и вызвать его как одну команду.Это все еще не объясняет, что на самом деле делает ebextensions, но позволяет мне двигаться вперед.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...