Предаване на команда с интервал към екземпляр на услуга Upstart

Имам услуга 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, контролирани от главен, така че това ограничава броя на отворените за мен решения. Някакви идеи?


person Stereoscopic    schedule 14.08.2015    source източник


Отговори (2)


използвайте директно командата start

sudo start worker-manager id=1 cmd="rqworker -v queue_1"

въпреки че може да се наложи да цитирате отново:

sudo start worker-manager id=1 cmd="'rqworker -v queue_1'"
person meuh    schedule 14.08.2015
comment
Страхотно, благодаря много! Както подозирахте, трябваше да увия моята променлива $cmd в кавички в моя exec ред, т.е. exec bash -c "$cmd" 2>$logfile, но след като това беше направено, работи! - person Stereoscopic; 14.08.2015

Можете да опитате да експортирате cmd променлива преди sudo команда.

Може да работи

export cmd="rqworker -v queue_1"
sudo -E service worker-manager start id=1

Трябва внимателно да прочетете man sudo и да обърнете внимание на флага -E. Това може да свърши работа

person Grv    schedule 14.08.2015