Запустить скрипт на уровне запуска 1

1187
arminb

Я пытаюсь запустить скрипт на уровне выполнения 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

0
Какая система `init` и / или какой дистрибутив Linux? Какие еще записи уровня запуска 1 находятся в вашем / etc / inittab`? mr.spuratic 11 лет назад 0
Это `Debian GNU / Linux 5.0 debarm` во встроенной системе. Еще одна запись для уровня запуска 1: `l1: 1: wait: /etc/init.d/rc 1` arminb 11 лет назад 0

1 ответ на вопрос

1
mr.spuratic

Документация 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, или посмотреть, можете ли вы сделать то, что вы хотите через поток ядра.

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