Мы используем Основанную на бродяге виртуальную машину под управлением Ubuntu 12.04 LTS для разработки трех Узлов. Серверы JS, которые запущены с помощью foreverjs. Мы выполняем сервисы под vagrant
пользователь и осуществляет проекты с хоста на виртуальную машину как совместно используемые папки.
При запуске сценария с forever
, это разветвится к фону после запуска, ведя центральный список всего выполнения сценариев (на пользователя). Для сценариев, которые используют различные имена, можно сослаться на них по имени, а также числовой индекс.
Сценариями затем управляют (запустился, перезапущенный, остановленный, и т.д.), использование forever
команда.
Я создал подобную выскочку conf файлы для каждого сервиса таким образом:
description "Control server.js"
chdir /vagrant/server
start on vagrant-mounted
stop on runlevel [016]
expect fork
pre-start script
test -d /vagrant/server
end script
exec sudo su vagrant -c "/usr/local/bin/forever start server.js"
Выскочка успешно запускает сервис, после того как бродячая совместно используемая папка смонтировалась. Однако закрывая виртуальную машину (т.е. vagrant halt
) зависает, пока это не испытывает таймаут и force-shuts-down VM.
Я предполагаю, что это вызвано тем, что это не знает, как остановиться навсегда сервис с тех пор forever
просто интерфейс к сервисам, которые я на самом деле хочу остановить.
Моя единственная попытка не работала (она действительно останавливает сервис, но Бродяга зависает к тайм-ауту):
pre-stop script
forever stop server.js
end script
Сервисы узла не должны завершаться корректно: Я был бы доволен любым сценарием, который уничтожает сценарии, но не заставляет Бродягу зависать на завершении работы.
Кроме того, удаление stop on runlevel
строка, кажется, не имеет никакого эффекта.
Во-первых, ваша проблема, похоже, в неправильном отслеживании вилки. Чтобы решить эту проблему, я собираюсь внести несколько изменений в вашу конфигурацию upstart:
setuid vagrant
в конфигурационном файле upstart.Следующая проблема заключается в том, что процесс навсегда вилкается в фон и вилка сама в фон. В результате Upstart отслеживает какой-то случайный pid, который, вероятно, уже не жив. Решение заключается в использовании функции автоматического перезапуска Upstart. Я продемонстрирую на примере ниже.
описание "server.js".
начинать с бродячих
остановка на уровне выполнения [016]
кДир/бродяга/сервер
бродяга-шлюх
передышка
лимит отсрочки платежа неограниченный
исполняющий сервер.js
Обратите внимание, что вам не нужно проверять, является ли каталог /vagrant/server каталогом, потому что upstart автоматически создает его из-за строфы chdir
.