RHEL6 Upstart: Поток событий во время перезагрузки

RHEL6 Upstart: Поток событий во время перезагрузки

У меня ситуация, когда сервер RHEL 6.4 отправляет TERMсигналы KILLслишком быстро, прежде чем приложения и базы данных успевают изящно остановиться. Похоже, что Upstart преждевременно передает управление скриптам sysv-rc.

Чтобы устранить эту неполадку, я попробовал добавить команды sleepи loggerв конфигурацию Upstart. pre-scriptСтрофа пишет в syslog, но сон никогда не завершается, потому что система перезагружается в течение 10 секунд. Я также добавил , kill timeoutкоторый игнорируется.

# cleanup at system shutdown
# Does stop all on apps, stops monit instances, then does a clean.
start on runlevel [016]

console output
kill timeout 120

task

pre-start script
    logger -s -t "arcsight-services-stopall" "Running pre-start..."
    /etc/init.d/arcsight_services stop
    sleep 60
end script

script
    logger -s -t "arcsight-services-stopall" "Running script..."
    /etc/init.d/arcsight_services shutdown monit
    /etc/init.d/arcsight_services clean all
end script

Я знаю, что Upstart должен был распараллелить процесс загрузки/остановки, но это только парализовало мои попытки отладки.

В RHEL 6 каков окончательный порядок выполнения скриптов после выдачи: shutdown -r now?

  1. shutdown -r now
  2. ?????
  3. /etc/init/rc.conf(Выскочка)
  4. /etc/rc.d/rc(sysv-rc)
  5. ?????
  6. /etc/rc3.d/K*(sysv-rc)
  7. /etc/rc6.d/S*(sysv-rc)
  8. ?????

Где вызываются остальные скрипты /etc/init/*.conf?

ОБНОВЛЕНИЕ: При разборе /etc/rc.d/rcя обнаружил, что если я touch /var/run/confirm, процесс переходит в интерактивный режим, а затем мои команды sleep и logger, похоже, выполняются. Это сбивает меня с толку, потому что я думал, что в этот момент Upstart передал управление sysv-rc.

решение1

Хотя этот ответ не затрагивает порядок сценариев, которые выполняются во время завершения работы RHEL 6, он решает проблему завершения системных процессов до их корректной остановки.

/etc/init/arcsight-services-stopall.conf:

# cleanup at system shutdown
# Does stop all on apps, stops monit instances, then does a clean.

start on starting rc RUNLEVEL=[016]

task
kill timeout 330

pre-start script
    logger -s -t "ArcSight" "ArcSight ESM shutdown initiated..."
    /etc/init.d/arcsight_services shutdown all
    /etc/init.d/arcsight_services shutdown monit
    /etc/init.d/arcsight_services clean all
    sleep 300
end script

script
    logger -s -t "ArcSight" "ArcSight ESM shutdown complete."
end script

Ключ был в изменении start on starting rc RUNLEVEL=[016]. Запуск этого скрипта, пока /etc/init/rc.confон только запускается, блокирует его на 5 минут, прежде чем будут выполнены скрипты sysv-rc. Надеюсь, в течение этих 5 минут все базы данных и приложения ArcSight будут изящно остановлены. Тестирование показало, что все было остановлено в течение 3 минут, поэтому 5 минут должны быть безопасной задержкой.

Всегда приятно видеть, как продукт стоимостью в несколько миллионов долларов требует вмешательства со стороны клиента.

Связанный контент