linux: определение того, выполняется ли запущенный скрипт init.d как часть последовательности запуска системы

Я пишу сценарий init.d, который должен запускать команды с определенными параметрами, если он выполняется при запуске системы. Тот же сценарий должен запускать команды с другими параметрами, если пользователь выполнял сценарий вручную.

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

Один из способов добиться этого — создать файл, скажем, «/tmp/.boot» из родительского сценария rc, который удаляется после выполнения всех сценариев запуска. А затем в сценарии инициализации проверьте наличие файла /tmp/.boot, чтобы определить, выполняется ли сценарий как часть последовательности запуска или нет.

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

С нетерпением ждем ваших предложений.

Спасибо и с уважением ~ Самир


person Sameer Naik    schedule 01.08.2011    source источник


Ответы (1)


Во-первых, состояние в /proc не должно сильно отличаться для многих скриптов. Уровень запуска указывает, находитесь ли вы в ранней фазе загрузки (runlevel дает доступ к нему), но в середине загрузки остается стартовый уровень запуска S.

Тем не менее, это неплохо, и попытки написать скрипты, которые изменяют поведение в зависимости от уровня выполнения, являются злом. Неотлаживаемый. Вместо этого вы можете просто попробовать другие аргументы командной строки, например «start-all» вместо «start». Или вы разделяете сценарий RC, как это делает Debian.

person thiton    schedule 01.08.2011