Как выполнить несколько команд в одной строке linux (openshift / docker )
Я ищу способ запускать сервер django и celery в одной строке. Сервисы (django и celery) развернуты в openshift как два отдельных pods с одним и тем же образом, и в настоящее время я запускаю сервис django (pod) с помощью python manage.py runserver
и celery (pod) с помощью celery -A myapp worker --loglevel=info --concurrency=8
Вместо того чтобы запускать отдельные pods для каждого, я хочу выполнять команду runserver и команду celery worker вместе. Как это сделать.
Я знаю, что && ; || используется для таких сценариев. но они не работают.
например :
cd ./app && python manage.py runserver #this works
cd ./app && python manage.py runserver && celery -A myapp worker --loglevel=info --concurrency=8
#this will cd to app, execute runserver command. but celery command doesn't get executed.
создайте файл bash и добавьте в него две команды следующим образом :
python manage.py runserver &
celery -A myapp worker --loglevel=info --concurrency=8
сделайте его исполняемым с помощью "chmod +x"
и запустите его в вашем докер-контейнере с помощью bash my_file.sh
Код && соединяет две команды и означает, что следующая команда будет выполнена ПОСЛЕ завершения первой и в зависимости от ее кода выхода.
Это логическое и - поэтому, если первая команда возвращает false, вторая не выполняется (поскольку уже известно, что логическое и оценивается как false).
Попробуйте это:
cd /path; ( python manage.py runserver &); ( celery -A myapp worker --loglevel=info --concurrency=8 &);
Заключительный & также помещает сельдерей на задний план. Удалите его, если хотите, чтобы сельдерей был на переднем плане. Как отмечалось выше, это не "контейнерный" дизайн - если у вас есть один процесс на контейнер, остальное управление становится значительно более простым. Обычно стоит разобраться с остальными необходимыми настройками (например, emptyDir{} может использоваться для обмена файлами между контейнерами внутри pod) и упростить развертывание раньше, чем позже.