Последовательный крючок перед входом в уровень запуска?

У меня очень специфическая проблема, и я сражался с 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.

1
задан 16 September 2011 в 11:58

7 ответов

Мне удалось решить мою проблему:

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 при загрузке (и тот же самый контакт команда блокирует его).

1
ответ дан 25 May 2018 в 18:48

Мне удалось решить мою проблему:

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 при загрузке (и тот же самый контакт команда блокирует его).

1
ответ дан 25 July 2018 в 21:19

Мне удалось решить мою проблему:

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 при загрузке (и тот же самый контакт команда блокирует его).

1
ответ дан 2 August 2018 в 02:58

Мне удалось решить мою проблему:

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 при загрузке (и тот же самый контакт команда блокирует его).

1
ответ дан 4 August 2018 в 18:48

Мне удалось решить мою проблему:

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 при загрузке (и тот же самый контакт команда блокирует его).

1
ответ дан 6 August 2018 в 03:12

Мне удалось решить мою проблему:

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 при загрузке (и тот же самый контакт команда блокирует его).

1
ответ дан 7 August 2018 в 20:53

Мне удалось решить мою проблему:

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 при загрузке (и тот же самый контакт команда блокирует его).

1
ответ дан 10 August 2018 в 09:14

Другие вопросы по тегам:

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