У меня очень специфическая проблема, и я сражался с Upstart всю ночь без успеха.
В моем конкретном случае у меня есть сервер с кучей загруженных клиентами PXE. Данные для клиентов хранятся в MySQL. Когда я закрываю сервер, прежде чем что-либо случится, мне также нужно отключить все клиенты PXE. В старом, последовательном мире sysvinit это был кусок пирога: просто положите сценарий удаленного завершения в начале последовательности, прежде чем сетевое взаимодействие, portmap, nfs, mysql спустится. Это было нормально, даже если для всех клиентов потребовалось 10 минут (но обычно 30 секунд было бы достаточно).
С выскочкой я не могу на всю жизнь довести клиента до выключения сервер. Мне удалось запустить сценарий до того, как mysql опустился, но этого недостаточно, так как кажется, что сеть и / или другая поддержка, с которой клиенты PXE ДЕЙСТВИТЕЛЬНО нуждаются, снижаются, поэтому они монтируют NFS в дыму, и они никогда не выключайте питание.
Самое близкое, что я получил, чтобы получить то, что я хочу, это:
kill timeout 70
start on runlevel [016] and (stopping mysql or stopping portmap or stopping idmapd or stopping statd)
task
exec the-script-that-shuts-clients-down.sh
Скрипт сообщает всем машинам, что выключится, а затем следит за ними (отправка пингов один раз в секунду), и только когда все они опущены, или скрипту становится скучно и откажется, если сервер продолжит отмену последовательности.
Теперь, с Upstart, мой скрипт убивается примерно через 7 секунд. Даже с 70-секундным тайм-аутом, как указано выше.
В идеале я хотел бы выполнить этот скрипт, прежде чем что-либо еще запускается с помощью переключателя уровня запуска, но Google говорит, что мне не повезло. В Upstart нет механизма SEQUENTIAL - даже «обратная совместимость» rc выполняется параллельно с остальными сервисами выскочки.
Любые идеи по этому поводу? Я запускаю Ubuntu 10.10.
Мне удалось решить мою проблему:
kill timeout 70
start on runlevel RUNLEVEL=[016] PREVLEVEL=[2345] and (starting rc RUNLEVEL=[016] or stopping mysql or stopping portmap or stopping idmapd or stopping statd)
task
exec the-script-that-shuts-clients-down.sh
Ну, почти, потому что похоже, что у Upstart есть небольшая ошибка, характерная для привязки к rc. По крайней мере, в Ubuntu 10.10. У меня нет 11.04 под рукой, чтобы подтвердить это.
Работа вокруг сейчас выглядит так:
В the-script-that-shuts-clients-down.sh , перед выходом я делаю
touch /etc/init/my-job.conf
, где my-job.conf содержит материал выше.
Еще один улов заключается в том, что если я пишу стартовый rc, а не запускаю rc RUNLEVEL = [016], то выскочка застревает на rc при загрузке (и тот же самый контакт команда блокирует его).
Мне удалось решить мою проблему:
kill timeout 70
start on runlevel RUNLEVEL=[016] PREVLEVEL=[2345] and (starting rc RUNLEVEL=[016] or stopping mysql or stopping portmap or stopping idmapd or stopping statd)
task
exec the-script-that-shuts-clients-down.sh
Ну, почти, потому что похоже, что у Upstart есть небольшая ошибка, характерная для привязки к rc. По крайней мере, в Ubuntu 10.10. У меня нет 11.04 под рукой, чтобы подтвердить это.
Работа вокруг сейчас выглядит так:
В the-script-that-shuts-clients-down.sh , перед выходом я делаю
touch /etc/init/my-job.conf
, где my-job.conf содержит материал выше.
Еще один улов заключается в том, что если я пишу стартовый rc, а не запускаю rc RUNLEVEL = [016], то выскочка застревает на rc при загрузке (и тот же самый контакт команда блокирует его).
Мне удалось решить мою проблему:
kill timeout 70
start on runlevel RUNLEVEL=[016] PREVLEVEL=[2345] and (starting rc RUNLEVEL=[016] or stopping mysql or stopping portmap or stopping idmapd or stopping statd)
task
exec the-script-that-shuts-clients-down.sh
Ну, почти, потому что похоже, что у Upstart есть небольшая ошибка, характерная для привязки к rc. По крайней мере, в Ubuntu 10.10. У меня нет 11.04 под рукой, чтобы подтвердить это.
Работа вокруг сейчас выглядит так:
В the-script-that-shuts-clients-down.sh , перед выходом я делаю
touch /etc/init/my-job.conf
, где my-job.conf содержит материал выше.
Еще один улов заключается в том, что если я пишу стартовый rc, а не запускаю rc RUNLEVEL = [016], то выскочка застревает на rc при загрузке (и тот же самый контакт команда блокирует его).
Мне удалось решить мою проблему:
kill timeout 70
start on runlevel RUNLEVEL=[016] PREVLEVEL=[2345] and (starting rc RUNLEVEL=[016] or stopping mysql or stopping portmap or stopping idmapd or stopping statd)
task
exec the-script-that-shuts-clients-down.sh
Ну, почти, потому что похоже, что у Upstart есть небольшая ошибка, характерная для привязки к rc. По крайней мере, в Ubuntu 10.10. У меня нет 11.04 под рукой, чтобы подтвердить это.
Работа вокруг сейчас выглядит так:
В the-script-that-shuts-clients-down.sh , перед выходом я делаю
touch /etc/init/my-job.conf
, где my-job.conf содержит материал выше.
Еще один улов заключается в том, что если я пишу стартовый rc, а не запускаю rc RUNLEVEL = [016], то выскочка застревает на rc при загрузке (и тот же самый контакт команда блокирует его).
Мне удалось решить мою проблему:
kill timeout 70
start on runlevel RUNLEVEL=[016] PREVLEVEL=[2345] and (starting rc RUNLEVEL=[016] or stopping mysql or stopping portmap or stopping idmapd or stopping statd)
task
exec the-script-that-shuts-clients-down.sh
Ну, почти, потому что похоже, что у Upstart есть небольшая ошибка, характерная для привязки к rc. По крайней мере, в Ubuntu 10.10. У меня нет 11.04 под рукой, чтобы подтвердить это.
Работа вокруг сейчас выглядит так:
В the-script-that-shuts-clients-down.sh , перед выходом я делаю
touch /etc/init/my-job.conf
, где my-job.conf содержит материал выше.
Еще один улов заключается в том, что если я пишу стартовый rc, а не запускаю rc RUNLEVEL = [016], то выскочка застревает на rc при загрузке (и тот же самый контакт команда блокирует его).
Мне удалось решить мою проблему:
kill timeout 70
start on runlevel RUNLEVEL=[016] PREVLEVEL=[2345] and (starting rc RUNLEVEL=[016] or stopping mysql or stopping portmap or stopping idmapd or stopping statd)
task
exec the-script-that-shuts-clients-down.sh
Ну, почти, потому что похоже, что у Upstart есть небольшая ошибка, характерная для привязки к rc. По крайней мере, в Ubuntu 10.10. У меня нет 11.04 под рукой, чтобы подтвердить это.
Работа вокруг сейчас выглядит так:
В the-script-that-shuts-clients-down.sh , перед выходом я делаю
touch /etc/init/my-job.conf
, где my-job.conf содержит материал выше.
Еще один улов заключается в том, что если я пишу стартовый rc, а не запускаю rc RUNLEVEL = [016], то выскочка застревает на rc при загрузке (и тот же самый контакт команда блокирует его).
Мне удалось решить мою проблему:
kill timeout 70
start on runlevel RUNLEVEL=[016] PREVLEVEL=[2345] and (starting rc RUNLEVEL=[016] or stopping mysql or stopping portmap or stopping idmapd or stopping statd)
task
exec the-script-that-shuts-clients-down.sh
Ну, почти, потому что похоже, что у Upstart есть небольшая ошибка, характерная для привязки к rc. По крайней мере, в Ubuntu 10.10. У меня нет 11.04 под рукой, чтобы подтвердить это.
Работа вокруг сейчас выглядит так:
В the-script-that-shuts-clients-down.sh , перед выходом я делаю
touch /etc/init/my-job.conf
, где my-job.conf содержит материал выше.
Еще один улов заключается в том, что если я пишу стартовый rc, а не запускаю rc RUNLEVEL = [016], то выскочка застревает на rc при загрузке (и тот же самый контакт команда блокирует его).