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

Я развертываю веб-приложение node в качестве выскочки, используя grunt, и отслеживаю его с помощью monit. Тем не мение:

  1. Моя конфигурация upstart и monit немного дублируют друг друга
  2. Upstart не выполняет расширение переменных внутри строф env
  3. Я не могу найти способ настроить monit динамически (например, файлы upstart .override)

Мой вопрос

Это означает, что я ищу подключаемый модуль grunt или другой инструмент, который я могу использовать для создания файлов uptstart .conf и monit conf.d/. Не могли бы вы помочь мне найти его (или предложить лучший способ надежной работы моего веб-приложения узла)?

Довольно грубое решение?

Честно говоря, шаблона подчеркивания файлов upstart и monit, вероятно, было бы достаточно, и это то, что я заверну в плагин grunt, если нет готового решения, но это похоже на проблему, которую должны решить другие люди. тоже столкнулись, поэтому я думаю, что есть решение, я просто не могу его найти.

Деталь

Немного больше деталей, чтобы проиллюстрировать три проблемы. Мой файл конфигурации выскочки выглядит так:

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 выскочки, отчет об ошибке здесь) есть это пара обходных путей, которые работают для переменных, используемых внутри блоков *script, которые интерпретируются как сценарии bash, но, похоже, они не работают в самом файле conf. Я думаю, что это делает невозможным указать идентификатор пользователя, который должно запускать приложение, как в файле конфигурации?

Те методы, которые я только что упомянул:

  • Метод 1 : не используйте env — повторите переменные в предварительном скрипте в файл, а затем отправьте его позже.
  • Метод 2. Дублируйте расширение переменной во всех телах скрипта, где это необходимо.
  • Метод 3: Сохраните переменные в файле и запишите их с помощью подстановки команд.

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


Ответы (1)


... или предложить лучший способ надежного запуска моего веб-приложения узла

Вместо этого используйте PM2 от Unitech.

Я запускаю все свои приложения node, используя 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 для управления самим приложением node, поэтому я собираюсь добавить замену pm2 на выскочку в свой список задач. - person cfogelberg; 23.04.2014
comment
Если вы используете собственный сервер для развлечения, PM2, вероятно, подойдет для экспериментов. В производстве это имеет серьезную проблему с утечкой памяти. Не лучший менеджер процессов, который вы хотите запустить в Linux. - person activars; 18.07.2015