Как да генерирам конфигурационни файлове за upstart и monit, използвайки обща спецификация или мета-конфигурация?

Внедрявам уеб приложение на възел като услуга за стартиране, използвайки grunt и го наблюдавам с помощта на monit. Въпреки това:

  1. Моята конфигурация на upstart и monit се дублират малко
  2. Upstart не прави разширение на променливи в env строфи
  3. Не мога да намеря начин да конфигурирам 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: Съхранявайте променливите във файл и ги записвайте чрез заместване на команди

person cfogelberg    schedule 22.04.2014    source източник


Отговори (1)


...или предложете по-добър начин за стабилно изпълнение на моето уеб приложение за възли

Вместо това използвайте PM2 от Unitech.

Изпълнявам всичките си приложения за възли, използвайки PM2. Работи перфектно и се конфигурира лесно. Има вградена функционалност за автоматично генериране на стартиращ скрипт. Той ви дава регистриране, наблюдение и лесна поддръжка.

Ето една добра статия, показваща акцентите.

Инсталиране

npm install -g pm2

Стартиране на приложението

pm2 start app.js

Показване на работещи приложения

pm2 list

Направете скрипт за стартиране

pm2 startup [ubuntu|centos|systemd]

Повече подробности в readme на тяхната страница в github

person aludvigsen    schedule 22.04.2014
comment
Благодаря, че предложихте pm_2 @display_name. Една от причините, поради които особено харесвам monit, е, че мога да наблюдавам чрез действителни опити за свързване, както и чрез системни и процесни параметри като използвана памет. pm2 предлага ли и тази функционалност? - person cfogelberg; 23.04.2014
comment
Да, така е! :) Дори има един API за получаване на цялата информация и показване в табло за управление ако искаш! Наистина препоръчвам да опитате. @cfogelberg - person aludvigsen; 23.04.2014
comment
Благодаря @display_name, но доколкото мога да разбера, pm2 не ми позволява да посоча теста в моя пример за monit по-горе или аналог: Свържете се със сървъра localhost:17394/monit.html на всеки 2 минути и рестартирайте сървърното приложение, ако отговорът Лошо е. Харесвам външния вид на pm2 за управление на самото приложение за възли, така че ще добавя заместване на pm2 с upstart към моя списък със задачи. - person cfogelberg; 23.04.2014
comment
Ако използвате самостоятелно хостван сървър за забавление, PM2 вероятно е подходящ за експериментиране. В производството това има сериозен проблем с изтичане на памет. Не е най-добрият мениджър на процеси, който искате да стартирате в linux. - person activars; 18.07.2015