Как определить различные сигналы остановки / перезапуска с помощью upstart

8

Я начинаю преобразовывать все наши системы в использование upstart для управления различными процессами приложения. Одна вещь, которую я постоянно упускаю, - это возможность отправлять другой сигнал процессу stopили restartсобытиям.

Например, мы запускаем наши веб-процессы с помощью Unicorn . Unicorn имеет отличный API для обработки сигналов. Когда я хочу изящно перезагрузить процесс, я посылаю мастеру pid сигнал USR2. Чтобы закрыть их изящно, я посылаю команду ВЫХОДА. TERM (сигнал остановки upstart по умолчанию) представляет собой немедленное отключение.

Другой пример - использование Resque . Чтобы изящно закрыть работника, я посылаю ему сигнал ВЫХОДА. Сигнал TERM снова вызывает немедленное отключение независимо от того, разветвлен ли ребенок работника или нет.

Поддерживает ли upstart пользовательские сигналы? Кажется, я нигде не могу его найти, и меня беспокоит, что я использую «неправильный инструмент для работы».

localshred
источник

Ответы:

4

Ubuntu 10,04 поставляется с выскочкой версией 0.6.6 , которая имеет kill signalиkill timeout параметры , которые будут настраивать соответствующее сигнальное и тайм - аут значение. Сигнал «перезагрузки» жестко закодирован SIGHUP.

Более новые версии upstartпредставляют reload signalпараметр - см. Другие ответы на этот вопрос для более подробной информации.

заместитель Wabbit
источник
Полезно знать, не уверен, почему сигнал перезагрузки жестко запрограммирован, но я думаю, мне пока придется с этим жить.
местные жители
Согласно ответу диклофа ниже, это теперь возможно через reload signal SIGUSR2, но требует upstart v 1.10.0.
Гэйс
6

Начиная с upstart v1.10.0 вы можете определить «сигнал перезагрузки».

https://launchpad.net/upstart/1.x/1.10.0

Эта версия доступна в Ubuntu начиная с версии 13.10 ... Я использовал эти инструкции для обновления своего экземпляра ec2:

/ubuntu/302762/upgrading-13-04-to-13-10

Я использую rails + puma и выполняю изящные перезагрузки с помощью этой директивы в моем файле /etc/init/app-1.conf:

reload signal SIGUSR2
diclophis
источник