1

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

Вот весь сценарий. На Raspberry Pi у меня есть некоторые внешние устройства, подключенные к выводам GPIO. Я хотел бы уведомить указанное оборудование, когда Raspberry Pi:

  • Перезагружается, пульсируя один GPIO в течение определенного периода.
  • Выключается, постоянно вытягивая GPIO до фактической остановки процессора.

Я уже думал о том, чтобы поместить скрипт в rc.d/ , но я не знаю, как выяснить, останавливается ли система или только перезагружается из скрипта, когда он выполняется.

Какие-нибудь мысли?

1 ответ1

0

Это обычная задача Linux - вы могли бы выполнить это с помощью сценариев уровня выполнения. Эта страница с Linux.com является довольно хорошим введением.

По сути, в Linux есть 7 уровней запуска:

  • 0 - остановка
  • 1 - однопользовательский режим
  • 2 - Базовый многопользовательский режим (без сети)
  • 3 - Полный (текстовый) многопользовательский режим
  • 4 - не используется
  • 5 - Полный (на основе GUI) многопользовательский режим
  • 6 - перезагрузка

Команда halt существу устанавливает уровень запуска компьютера равным 0. Когда это происходит, происходят все различные сценарии уровня 0. Вы можете увидеть все эти сценарии, выполнив ls -l /etc/rc0.d/ .

Аналогично, команда reboot устанавливает уровень запуска компьютера равным 6 и запускает все сценарии в /etc/rc6.d/ .

Решение вашей проблемы - создать скрипт в стиле init. Либо скопируйте один из существующих, либо создайте свой собственный с нуля (см. Эту ветку StackExchange для получения дополнительной информации; в качестве альтернативы в Интернете имеется множество документации по созданию сценариев инициализации в Linux).

Если вы хотите, чтобы скрипт делал то же самое, когда компьютер выключается и перезагружается, просто создайте программную ссылку на ваш скрипт в обоих /etc/rc0.d и /etc/rc6.d .

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

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