Я развертываю веб-приложение node в качестве выскочки, используя grunt, и отслеживаю его с помощью monit. Тем не мение:
- Моя конфигурация upstart и monit немного дублируют друг друга
- Upstart не выполняет расширение переменных внутри строф env
- Я не могу найти способ настроить 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. Я думаю, что это делает невозможным указать идентификатор пользователя, который должно запускать приложение, как в файле конфигурации?
Те методы, которые я только что упомянул: