У меня есть служба Upstart, которая должна запускать несколько рабочих экземпляров (используя rq в качестве очереди заданий). Но у меня возникают проблемы с передачей команд с пробелами в средство запуска службы.
Мой конфиг Upstart (worker-manager.conf) выглядит так:
description "my worker manager"
instance $id
start on runlevel [2345]
stop on runlevel [!2345]
respawn
script
logfile="/home/ubuntu/worker.log"
exec bash -c $cmd 2>$logfile
end script
Итак, чтобы запустить работника, это работает:
sudo service worker-manager start id=1 cmd="rqworker"
Но это не так:
sudo service worker-manager start id=1 cmd="rqworker -v queue_1"
Ошибка, которую я получаю:
start: Env must be KEY=VALUE pairs
Мне еще не повезло с использованием двойных кавычек, одинарных двойных кавычек или экранированием пробелов. Жесткое кодирование аргумента внутри файла конфигурации работает.
Я не могу передать команду в виде нескольких аргументов, потому что я не знаю заранее, какие или сколько очередей следует прослушивать и т. д. Обходной путь, который у меня есть на данный момент, — поместить команду в файл и позволить службе менеджер прочитал это оттуда, но это беспорядочно, и я уверен, что есть лучший способ. Кроме того, все это должно происходить на множестве экземпляров «миньонов» AWS, контролируемых мастером, что ограничивает количество доступных мне решений. Любые идеи?