Выскочка не может остановить foreverjs сервисы на завершение работы?

Сценарий

Мы используем Основанную на бродяге виртуальную машину под управлением 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 строка, кажется, не имеет никакого эффекта.

1
задан 18 July 2014 в 05:01
1 ответ

Во-первых, ваша проблема, похоже, в неправильном отслеживании вилки. Чтобы решить эту проблему, я собираюсь внести несколько изменений в вашу конфигурацию upstart:

  • Во-первых, процарапать использование su для смены пользователя. su не должно использоваться для даемонов, только для обычных пользователей (это может вызвать проблемы с срабатыванием pam), и (что более уместно) оно вилкирует процесс в фоновом режиме (сложнее для Upstart отслеживать и убивать даемона). Вместо этого мы используем setuid vagrant в конфигурационном файле upstart.
  • Следующая проблема заключается в том, что процесс навсегда вилкается в фон и вилка сама в фон. В результате Upstart отслеживает какой-то случайный pid, который, вероятно, уже не жив. Решение заключается в использовании функции автоматического перезапуска Upstart. Я продемонстрирую на примере ниже.

    описание "server.js".
    
    начинать с бродячих
    остановка на уровне выполнения [016]
    
    кДир/бродяга/сервер
    бродяга-шлюх
    
    передышка
    лимит отсрочки платежа неограниченный
    
    исполняющий сервер.js
    

Обратите внимание, что вам не нужно проверять, является ли каталог /vagrant/server каталогом, потому что upstart автоматически создает его из-за строфы chdir

.
1
ответ дан 4 December 2019 в 00:22

Теги

Похожие вопросы