Внедрявам уеб приложение на възел като услуга за стартиране, използвайки grunt и го наблюдавам с помощта на monit. Въпреки това:
- Моята конфигурация на upstart и monit се дублират малко
- Upstart не прави разширение на променливи в env строфи
- Не мога да намеря начин да конфигурирам monit динамично (ala upstart
.override
файлове)
Въпросът ми
Това означава, че търся grunt плъгин или друг инструмент, който мога да използвам за генериране на upstart .conf и monit conf.d/ файлове. Можете ли да ми помогнете да намеря такъв (или да предложите по-добър начин за стабилно стартиране на моето уеб приложение за възли)?
Доста грубо решение?
Честно казано, шаблон за подчертаване на upstart и monit файловете вероятно би бил достатъчен и това е, което ще обвия в grunt плъгин, ако няма готово решение, но това изглежда като проблем, който други хора трябва да решат също се натъкнах, така че си представям, че има решение, но не мога да го намеря.
детайл
Малко повече подробности, за да илюстрираме трите проблема. Моят upstart conf файл изглежда така:
setuid node
setgid node
# ...
script
mkdir -p /home/node/.my-app
echo $$ > /home/node/.my-app/upstart.pid
/usr/local/bin/node /var/node/my-app/server.js >> /var/node/my-app/logs/console.log 2>&1
end script
# ...
И моята конфигурация на monit изглежда така:
check process node with pidfile /home/node/.my-app/upstart.pid
start program = "/sbin/start my-app" with timeout 60 seconds
stop program = "/sbin/stop my-app"
if failed host localhost port 17394 protocol http
and request "/monit.html"
then restart
if 3 restarts within 5 cycles then timeout
Както можете да видите, пътят на PID файла и конфигурационната директория се дублират в двете (проблем 1) и бих искал да параметризирам хоста, порта и URL адреса на заявката във файла monit (проблем 3).
За проблем 2 (няма разширение на променлива в env
строфа на upstart, доклад за грешка тук) са няколко заобиколни решения, които работят за променливи, използвани вътре в *script блокове, които се интерпретират като bash скриптове, но изглежда не работят в самия conf файл. Мисля, че това прави невъзможно да се посочи потребителският идентификатор, който приложението трябва да работи като в конфигурационен файл?
Тези техники, които току-що споменах:
- Метод 1 : Не използвайте env - повторете променливите в предварителния скрипт към файл и след това го извършете по-късно
- Метод 2: Дублирайте разширението на променливата във всички тела на скрипта, където е необходимо
- Метод 3: Съхранявайте променливите във файл и ги записвайте чрез заместване на команди