Проверка работоспособности сельдерея завершается ошибкой в `set -e; cmd1;cmd2` и работает в `set -e; cmd1 && cmd2`
Проблема
docker compose завершает работу с контейнером приложений для приложения django celery только в одном из 4 возможных вариантов использования. В каждом из случаев рассматриваемый скрипт выполняется внутри одного и того же образа docker для django python.
Меняется операционная система хоста для docker env, но не контейнер. Итак, для всех этих тестов мы используем идентичную версию bash для этого скрипта, которая является точкой входа в контейнер docker
- Операционная СИСТЕМА macos:
set -e; cmd1;cmd2илиset -e; cmd1 && cmd2работают одинаково - Основная операционная система ubuntu:
set -e; cmd1;cmd2сбой,set -e; cmd1 && cmd2работает
Информация о контейнере:
- ОС:
Debian GNU/Linux 12 (bookworm) - bash:
5.2.15(1)-release (aarch64-unknown-linux-gnu)
В случае сбоя мы видим, что время ожидания вызова django для проверки работоспособности celery истекло.
Я не понимаю, как set -e и && приводят к различному поведению, учитывая следующие сценарии точки входа
Сбой в работе ubuntu case
set -e
...
python my_django_app.py start celery-worker celery-beats celery-healthcheck-worker
daphne -b 0.0.0.0 -p 8000 my_django_app.asgi:application
Передача всех обращений
set -e
...
python my_django_app.py start celery-worker celery-beats celery-healthcheck-worker && daphne -b 0.0.0.0 -p 8000 my_django_app.asgi:application
Головоломка
В моем понимании, set -e с cmd1; cmd2 и set -e с cmd1 && cmd2 должны приводить к одинаковому поведению, но, похоже, этого не происходит. Тот факт, что ошибка связана с вызовом celery -A my_django_app status, заставляет меня подозревать связь django, celery и daphne и наводит на мысль о каком-то состоянии гонки, но, похоже, это не должно быть так
Опять же, учитывая, что задано значение set -e, первый сбой завершает работу точки входа. В && есть изменение отношения, но я не думаю, что оно должно быть.
Что я упускаю?