Elasti c Бобовый стебель подвешен во время выполнения отгибания - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть среда Elasti c Beanstalk, которая включает в себя приложение Ruby on Rails и Sidekiq Worker.

Для перезапуска Sidekiq во время eb deploy сборки у меня есть хук после развертывания, который сгенерирован с ebextension.

Хук пост-развертывания выглядит следующим образом:

      #!/usr/bin/env bash
      . /opt/elasticbeanstalk/support/envvars

      EB_APP_DEPLOY_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_deploy_dir)
      EB_APP_PID_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_pid_dir)
      EB_APP_USER=$(/opt/elasticbeanstalk/bin/get-config container -k app_user)
      EB_SCRIPT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k script_dir)
      EB_SUPPORT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k support_dir)

      . $EB_SUPPORT_DIR/envvars
      . $EB_SCRIPT_DIR/use-app-ruby.sh

      SIDEKIQ_PID=$EB_APP_PID_DIR/sidekiq.pid
      SIDEKIQ_CONFIG=$EB_APP_DEPLOY_DIR/config/sidekiq.yml

      . /opt/elasticbeanstalk/support/envvars.d/sysenv

      sleep 10

      cd $EB_APP_DEPLOY_DIR

      echo "starting sidekiq"
      su -s /bin/bash -c "bundle exec sidekiq \
        -e $RACK_ENV \
        -P $SIDEKIQ_PID \
        -C $SIDEKIQ_CONFIG 2>&1 | logger -t sidekiq-$RACK_ENV & disown" $EB_APP_USER

Я пытаюсь перенаправить Sidekiq журналы на syslog через logger.

Когда IS SH в экземпляр и вручную запустить скрипт с sudo /opt/elasticbeanstalk/hooks/appdeploy/post/50_restart_sidekiq.sh, он успешно запускает Sidekiq и освобождает оболочку.

Но когда я развертываю приложение через eb deploy, оно застревает после запуска Sidekiq и не завершает sh, завершая этот хук.

Это последняя строка в eb-activity.log:

[2020-04-06T11:52:16.708Z] INFO [14255] - [Application update app-297d-200406_145059-stage-200406_145059@124/AppDeployStage1/AppDeployPostHook/50_restart_sidekiq.sh] : Starting activity...

Если я вручную уничтожу процесс Sidekiq с помощью kill -TERM SIDEKIQ_PID, крючки отклеятся и продолжат отмечать развертывание как успешное.

Это не возникало проблем, пока я не перенаправил журналы на syslog.

Мое лучшее предположение, что это как-то связано с тем, как я передаю STDOUT в логгер, или с тем, как я отрекаюсь от процесса выпуска оболочки во время выполнения перехвата.

Для записи я также попробовал это без отключения:

su -s /bin/bash -c "bundle exec sidekiq \
        -e $RACK_ENV \
        -P $SIDEKIQ_PID \
        -C $SIDEKIQ_CONFIG 2>&1 | logger -t sidekiq-$RACK_ENV &" $EB_APP_USER

, а также попытался добавить exit 0 в конце.

Any Помощь будет принята с благодарностью.

...