Назад | Перейти на главную страницу

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

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

Чтобы решить эту проблему, я попытался добавить sleep и logger команды в конфигурацию Upstart. В pre-script строфа записывает в системный журнал, но спящий режим никогда не завершается, потому что система перезагружается в течение 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, процесс переходит в интерактивный режим, а затем мои команды сна и журнала, похоже, выполняются. Это сбивает меня с толку, потому что я думал, что в этот момент Upstart передал управление sysv-rc.

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

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