Бороздя просторы интернета, наткнулся на клевую штуковину от heroku - Procfile Это небольшая идеология (наверно), заключающаяся в быстром запуске каких-либо процессов используя специальный файл с именем Procfile, в котором описываются в формате “название команды: команда” команды для запуска процессов. Обычно это требуется для быстрого деплоя либо запуска чего-то постоянно. Я это использую при разработке и запуске dev окружения (поднятия вагранта, запуск базы, запуск воркеров), чтобы запустить сразу кучу процессов и разом их по Ctrl-C убить.
Для работы с этими Procfile существует целая куча программ написаных на разных языках, но обычно полностью совместимые между собой, как по командному интерфейсу, так и по выводу, можно отметить следующие:
- Foreman на Ruby
- Honcho на православном Python
- Shoreman на shell
- Norman node.js имплементация О_о
- Forego на модном Go
Я же использую python реализацию - honcho.
Устанавливается он очень просто:
pip install honcho
Все, после этого в системе доступен как honcho.
Затем, в любой директории где находимся создаем Procfile и наполняем его согласно своей нужде, для примера мой:
celery: vagrant ssh -c "cd /vagrant && celery worker -n worker.base -A workers -l DEBUG"
meteor: bash -c "cd front && exec meteor"
Теперь, находясь в директории с этим Procfile мы можем запускать либо сразу все процессы, либо какой-то отдельный, используя следующие команды соответственно:
honcho run
honcho start meteor
После этого, будет запущен honcho, который запустит эти процессы и красиво выведет их stdout:
$ honcho start meteor
16:03:40 meteor.1 | started with pid 89989
16:03:40 meteor.1 | [[[[[ ~/workspace/python/src/meteor/front ]]]]]
16:03:40 meteor.1 | => Started proxy.
=> Started your app. Starting your app...
А если нажать Ctrl-C, то всем пошлется SIGINT и все должны будут завершиться.
Помимо этого, можно задать единые переменные окружения для всех процессов, для этого надо в этой же папке создать .env файл, куда перечислить все свои переменные окружения.
В целом, очень полезная утилита для разработчиков и хорошо показавшая себя в автоматизации ежедневной рутины