Sysvinit в Linux Ubuntu
Общие понятия
SysVinit это набор программ для инициализации в стиел SystemV
/etc/inittab - конфигурационные файлы инициализации
/etc/initscript - используется init для запуска процессов указанных в файле конфигурации
/etc/shutdown.allow - список имен учетных записей, используемых shutdown при вызове с опцией -a, чтобы решить следует ли разрешить завершение работы компьютера или нет
/var/run/powerstatus или /etc/powerstatus - используется init для сбоев питания и процедур восстановления.
SysVinit предоставляет:
init и ее управляющую программу telinit
shutdown, halt, poweroff, reboot
bootlogd daemon
killall5, runlevel, fstab-decode
Ядро автоматически при запуске ищет init в директориях: /sbin, /etc и /bin
init порождает дочерние процессы согласно настройка в inittab, контролирует их работу, реагирует на команды полученные через его FIFO /run/initctl
init использует вызовы POSIX openlog(), syslog() и closelog()
Если установлена переменная среды CONSOLE, init использует ее значение в качестве пути к узлу устройства консоли вместо /dev/console.
В сообщениях системного журнала init указываются LOG_DAEMON объекта и LOG_INFO.
inittab определяет процессы, которые должны запускаться с помощью init как во время последовательности загрузки, так и во время нормальной работы
Уровни выполнения sysvinit обозначаются числом в диапазоне от 0 до 9.
Процессы, порождаемые init для каждого из этих уровней выполнения, определены в файле /etc/inittab
1: Однопользовательский (режим сопровождения): вы хотите использовать этот, если у вас возникнут проблемы.
3: Многопользовательский: обычный режим
5: Многопользовательский с X11: такой же, как 3, но с X11, загруженным в виртуальный терминал 8 по умолчанию
0: Остановка
6: Перезагрузка
2, 4: Не используется
При переходе с одного уровня на другой, процессы текущего уровня завершаются, запускаются процессы нового уровня
Посмотрите/etc/inittab, чтобы увидеть, как это работает.
Каждая запись файла inittab состоит из четырех полей, разделенных двоеточиями (':'), которым необязательно предшествует последовательность пробелов
Первое - это поле идентификатора, последовательность символов, которая однозначно идентифицирует запись
Второе - это поле runlevels, последовательность символов, которая обычно представляет набор уровней выполнения, если это поле пустое, значит команда должна выполняться на любом уровне
Третье - это поле действия(флаги), оно указывает, когда должна быть выполнена программа, названная в следующем поле, и как она должна быть выполнена:
boot - выполняется раз, при загрузке системы
ctraltdel - нажата комбинация клавиш ctrl+alt+del
initdefault - строка с этим параметром читается при инициализации определяя уровень загрузки
off - отключить выполнение команды
once - выполнять команду только один раз
powerfail - при отключении электроэнергии, соответственно ошибку будет видно только при наличии ибп.
powerkwait - подача электроэнергии возобновилась
powerwait - система перешла в режим ожидания(с ибп)
respawn - если при выполнении появится ошибка, то возобновить программу
sysinit - команды выполняются перед запуском консоли, точнее до приглашения ввести пароль
wait - ожидание завершения команды(процесса) т.е. другие действия выполняться не будут(например проверка диска)
Четвертое и последнее поле - это поле процесса, в нем указывается имя программы или ее путь, а также аргументы программы
Выбранный уровень при запуске по умолчанию
id:5:initdefault
идентификатор: уровни выполнения: действие:процесс
runlevel - Возвращает предыдущий и текущий уровни запуска, последний уровень запуска записан в /var/run/utmp
telinit - Говорит init о необходимости смены уровня запуска. После загрузки системы вы можете telinit nсообщить init, чтобы он изменил уровень выполнения на n. затем init считывает inittab и "различает" уровень выполнения n и текущий уровень выполнения - уничтожая процессы, отсутствующие на новом уровне выполнения, и выполняя действия, отсутствующие на старом уровне выполнения
pidof - возвращает PID указанных програм
lastb - возвращает ошибки входа в систему, отмеченные в /var/log/btmp
Ядро может не загрузиться полностью из-за поврежденного или мертвого жесткого диска или файловой системы, отсутствия ключевых файлов и т. д. В этом случае ваш инициализирующий образ может автоматически перейти в однопользовательский режим, который разрешает только вход с правами root и использует /sbin/sulogin вместо /sbin/login для управления процессом входа.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failrule;"
Команда выше будет выполняться при выключении питания на любом уровне
f - отменяет проверку диска
h - выключение питания
f - время в мин. до перезагрузки
rc.d скрипты
Initscripts использует rc.d скрипты для управления запуском, остановкой и перезапуском демонов.
Источник /etc/rc.conf, /etc/rc.d/functions, /etc/conf.d/DAEMON_NAME.
Используйте функции /etc/rc.d/functions вместо того, чтобы дублировать их функциональность.
Включите, по крайней мере, start, stop и restart в качестве аргументов скрипта.
Доступные функции
Есть некоторые функции, предоставляемые/etc/rc.d/functions:
stat_busy "message": установить статус занято для печатного сообщения (например, запуск демона [ЗАНЯТО])
stat_done: установить статус готово (например, запуск демона [ГОТОВО])
stat_fail: ошибка установки статуса (например, запуск демона [СБОЙ])
get_pid program: получить PID программы
ck_pidfile PID-file program: проверьте, действителен ли PID-файл для программы (например, ck_pidfile /var/run/daemon.pid daemon || rm -f /var/run/daemon.pid)
[add|rm]_daemon program: добавление / удаление программы для запущенных демонов (хранится в/run/daemons/)
Полный список функций намного длиннее, и большинство возможностей (например, способ контролировать, могут ли пользователи, не являющиеся пользователями root, запускать daemon) все еще недокументированы и могут быть изучены только из /etc/rc.d/functionsисточника. Смотрите также man rc.d
invoke-rc.d
Status services:
invoke-rc.d php7.4-fpm status