1

Этот вопрос касается сценария, который удерживает блокировку для предотвращения нескольких одновременно выполняемых экземпляров самого себя, который выполняется в определенное время различными процессами и который отправляет команды перезагрузки в определенных ситуациях.

Предположим, что требуется перезагрузка, и сценарий спит несколько секунд (чтобы предотвратить снятие блокировки до того, как перезагрузка вступит в силу). Затем сценарий получит сигнал и завершит свою работу (и этим снимет блокировку).

Вопрос: Есть ли возможное временное окно, в котором этот сценарий уже остановлен событием перезагрузки, и все же запущены некоторые другие процессы, которым удается снова запустить сценарий?

Лично я чувствую, что системы Linux сначала переключаются в некое состояние, в котором выполнение новых процессов вообще запрещено, а после этого запущенные процессы останавливаются. Но это только желаемое за действительное, поскольку я не могу найти документацию по этому поводу.

Некоторые уточнения:

а) Дело не в том, что файл блокировки не удаляется должным образом. Поскольку я использую flock, блокировка исчезает в тот момент, когда скрипт завершается, даже в случае сбоев.

б) В большинстве случаев скрипт запускается с правами root от atamon.

1 ответ1

0

В ваших личных чувствах есть доля правды.

Я не буду вдаваться в подробности, но процесс загрузки linux можно резюмировать следующим образом. (Возможны изменения, так как init больше не всегда используется по умолчанию).

  1. Загрузчик передает управление ядру linux и init .
  2. Затем init просматривает свои контрольные списки и начинает обходить свои режимы выполнения.
  3. init переходит на уровень запуска 1. Это также называется однопользовательским режимом, и именно здесь запускаются основные службы для работающей системы. Только процессы, принадлежащие корню, могут быть запущены.
  4. init переходит на уровень запуска 2. Похож на вышеописанный, но многопользовательский режим. В процесс вступают другие пользователи.
  5. Уровень запуска 3 инициирует сеть.
  6. 4 пропущено (я так и не понял почему. Навсегда зарезервировано для будущего использования, я думаю). Вместо этого init сразу переходит к 5, где и xorg . Многие пользовательские сервисы (веб-серверы, почта и т.д.) Обычно запускаются здесь.

Теперь, чтобы ответить на ваш вопрос, я считаю очень маловероятным, что сценарий сможет запуститься во время завершения работы системы. Если я правильно помню, во время этого процесса невозможно запускать новые процессы обычным способом. Исходя из того, что я понял, основная проблема заключается в том, что сценарий запускается и оставляет файл блокировки, который будет оставлен во время перезагрузки, тем самым предотвращая запуск сценария, я прав? В этом случае я хотел бы иметь небольшой загрузочный скрипт, возможно, на уровне выполнения 3, который удалил бы этот файл блокировки, если он найден.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .