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

Порядок выполнения скриптов уровня запуска

Мои сценарии уровня запуска 0 в /etc/rc0.d, которые должны выполняться при остановке, например,

  1. K05foo -> ...
  2. K10bar -> ...
  3. К80баз -> ...
  4. S10 еще -> ...
  5. S90halt -> ...

Правильно ли, что порядок исполнения такой, как указано выше, то есть

  1. Сначала все убийства в порядке возрастания приоритета
  2. Затем все начинается в порядке возрастания приоритета
  3. Все это независимо от уровня выполнения, на который мы переключаемся (S, 0-6)
  4. Все сценарии всегда вызываются (т. Е. Нет дополнительных проверок, которые препятствовали бы вызову сценария, например, действительно ли на предыдущем уровне выполнения этот сценарий был запущен)

Я сбит с толку, потому что в моей встроенной системе некоторые скрипты не выполняются, и эта страница говорит

Линия S20 запускается перед S91, а K91 убивает перед K20.

что противоречит моему тексту выше.

Отвечая на свой вопрос, для полноты:

Я использую busybox в системе OpenEmbedded. Сценарий rc в /etc/init.d/rc имеет следующее поведение:

  • На целевом уровне выполнения все убийства выполняются до всех запусков.
  • Все скрипты выполняются в порядке возрастания приоритета.
  • Но: запуски выполняются только в том случае, если на предыдущем уровне запуска также не было эквивалентного запуска (т.е. он запускается заново)
  • И, если целевой уровень выполнения равен 0 (остановка) или 6 (перезагрузка), то запуски фактически выполняются как убийства, т.е. «стоп» передается в качестве аргумента. Но все равно после всех убийств, и все равно нет, если на предыдущем уровне запуска существовал эквивалентный старт.

Кроме того, меня укусило то, что shutdown now фактически переключается на уровень выполнения 1, а не уровень выполнения 0. Вы должны использовать halt или poweroffдля уровня запуска 0. Итак, мои скрипты в rc0.d на самом деле не выполнялись, только те, которые оказались в rc1.d.

Это зависит от используемого вами демона инициализации.

Для SysVInit вы можете предположить, что произойдет что-то вроде следующего, когда вы измените уровень запуска на 0:

rl=0
for k in /etc/rc$rl.d/K*; do
  $k stop
done
for s in /etc/rc$rl.d/S*; do
  $s start
done

Я не вижу противоречия приведенного вами предложения тому, что вы сказали выше.