Запустить скрипт на уровне выполнения 1
Я пытаюсь запустить скрипт на уровне запуска 1 из /etc/inittab
, Сценарий, который я хочу запустить, выглядит следующим образом:
#!/bin/bash
while [ 1 ]
do
#do something
sleep 1
#do something
sleep 1
done
inittab
линия выглядит так: d666:123456:respawn:/root/script_to_run.sh
На уровне выполнения 2-6 все работает нормально. Когда я перехожу на уровень запуска 1 (init 1
) скрипт останавливается и больше не выполняется.
Также я пытаюсь обработать скрипт, который будет вызван перед вводом уровня запуска 0. Я пробовал эту строчку в inittab
: d667:0:wait:/root/script_to_run_right_before_runlevel_0.sh
1 ответ
Документация Debian не является явной, init(8)
предупреждает только, что уровни выполнения S,0,1,6 зарезервированы, а также:
В системе Debian ввод уровня запуска 1 приводит к уничтожению всех процессов, за исключением потоков ядра и сценария, который выполняет уничтожение и другие процессы в своем сеансе. Как следствие этого, небезопасно возвращаться с уровня выполнения 1 на многопользовательский уровень выполнения: демоны, которые были запущены на уровне выполнения S и необходимы для нормальной работы, больше не работают. Система должна быть перезагружена.
Выполнить уровень 1 в /etc/inittab
является:
l1:1:wait:/etc/init.d/rc 1
/etc/init.d/rc 1
позвоню /etc/rc1.d/S*
в том числе S01killprocs
который убивает большинство вещей, которые он может найти, и S21single
, который выполняет "exec init -t1 S
", чтобы переключиться в однопользовательский режим, поэтому уровень запуска 1 очень короток. Однопользовательский режим"S"в /etc/inittab
является:
~~:S:wait:/sbin/sulogin
Который означает, что init
будет просто ждать, пока ждать, пока sulogin
возвращается, прежде чем делать что-либо еще.
Короче говоря, уровни запуска "1" и "S" являются "невмешательством" в Debian (и, вероятно, в большинстве других unixen).
Если вы поместите свою запись inittab над системной "S", то init
возрождение и тому S01killprocs
Сценарий будет бороться с этим некоторое время (вы можете не заметить этого без запущенного системного журнала), что, вероятно, очень сложно и, вероятно, не будет делать то, что вы хотите.
Вы можете получить часть того, что вам нужно, с помощью одного или обоих способов изменения сценариев запуска и реализации /etc/initscipt
отслеживать и регистрировать различные действия init
, Это действительно хороший способ подключить рабочую систему, поэтому я советую сначала поэкспериментировать с виртуальной машиной;-).
Я думаю, что ваши другие варианты, ни один из которых не кажется очень привлекательным, стоит попробовать другой init
или посмотрите, можете ли вы делать то, что вы хотите через поток ядра.