Перш за все, systemd
це не традиційний унікс init
. Systemd - це набагато більше, тому порівнювати їх трохи несправедливо.
Щоб відповісти на запитання, потрібні деякі бінарні файли та наступні файли конфігурації:
/usr/lib/systemd/system/default.target
/usr/lib/systemd/system/basic.target
/usr/lib/systemd/system/sysinit.target
/usr/lib/systemd/system/getty.target
/usr/lib/systemd/system/getty@.service
/usr/lib/systemd/system/console-getty.service
видача systemctl enable console-getty.service getty@tty2.service
потім створює ці посилання:
/etc/systemd/system/default.target.wants/getty@tty2.service -> / lib / systemd / system / getty @ service
/etc/systemd/system/getty.target.wants/console-getty.service -> /lib/systemd/system/console-getty.service
ПРИМІТКА . Щоб використовувати systemd
спеціальні функції для agetty
динамічного запуску , за запитом при натисканні клавіші Alt+ F3тощо, виявляється, що ви також повинні мати принаймні ці два файли:
/etc/systemd/logind.conf
/lib/systemd/system/autovt@.service
де autovt@.service
є посилання на getty@.service
.
Зміст файлів конфігурації:
default.target
, getty.target
, sysinit.target
Файли можуть бути порожніми для крім [Unit]
тега і (можливо) Description=xxx
.
basic.target
також містить інформацію про залежність:
[Одиниця]
Опис = Основна система
Потрібен = sysinit.target
Хоче = sockets.target timers.target paths.target slices.target
Після = sysinit.target sockets.target timers.target paths.target slices.target
Я не впевнений, потрібні посилання на цілі, які не існують як файли. Вони описані на сторінці systemd.special(7)
man.
console-getty.service
: (Спеціальний випадок для зручності на консолі)
[Одиниця]
Опис = Консоль Getty
After = systemd-user-session.service plymouth-quit-wait.service
Перед = getty.target
[Сервіс]
ExecStart = - / sbin / agetty - незрозуміло - консоль "boep-boud" 115200,38400,9600 $ TERM
Тип = простоювати
Перезапуск = завжди
RestartSec = 0
UtmpIdentifier = мінуси
TTYPath = / dev / консоль
TTYReset = так
TTYVHangup = так
KillMode = процес
ІгноруватиSIGPIPE = ні
SendSIGHUP = так
[Встановити]
WantedBy = getty.target
getty@.service
: (загальна конфігурація для всіх служб getty, крім консолі)
[Одиниця]
Опис = Getty на% I
After = systemd-user-session.service plymouth-quit-wait.service
Перед = getty.target
IgnoreOnIsolate = так
ConditionPathExists = / dev / tty0
[Сервіс]
ExecStart = - / sbin / agetty - незрозуміло% I $ TERM
Тип = простоювати
Перезапуск = завжди
RestartSec = 0
UtmpIdentifier =% I
TTYPath = / dev /% I
TTYReset = так
TTYVHangup = так
TTYVTDisallocate = ні
KillMode = процес
ІгноруватиSIGPIPE = ні
SendSIGHUP = так
[Встановити]
WantedBy = getty.target
DefaultInstance = tty1
Нарешті, напевно, вам знадобиться кілька цих спеціальних бінарних файлів (я не пробував, які з них є вирішальними):
/ lib / systemd / systemd (/ sbin / init зазвичай вказує на це)
/ lib / systemd / systemd-logind
/ lib / systemd / systemd-cgroups-agent
/ lib / systemd / systemd-user-session
/ lib / systemd / systemd-vconsole-setup
/ lib / systemd / systemd-update-utmp
/ lib / systemd / systemd-сон
/ lib / systemd / systemd-sysctl
/ lib / systemd / systemd-initctl
/ lib / systemd / systemd-відповідь-пароль
/ lib / systemd / systemd-ac-power
/ lib / systemd / systemd-activate
/ lib / systemd / systemd-підсвітка
/ lib / systemd / systemd-binfmt
/ lib / systemd / systemd-bootchart
/ lib / systemd / systemd-bus-proxyd
/ lib / systemd / systemd-coredump
/ lib / systemd / systemd-cryptsetup
/ lib / systemd / systemd-fsck
/ lib / systemd / systemd-hostnamed
/ lib / systemd / systemd-journald
/ lib / systemd / systemd-journal-gatewayd
/ lib / systemd / systemd-journal-remote
/ lib / systemd / systemd-localed
/ lib / systemd / systemd-обробляється
/ lib / systemd / systemd-module-load
/ lib / systemd / systemd-multi-seat-x
/ lib / systemd / systemd-networkd
/ lib / systemd / systemd-networkd-wait-online
/ lib / systemd / systemd-quotacheck
/ lib / systemd / systemd-random-seed
/ lib / systemd / systemd-readahead
/ lib / systemd / systemd-remount-fs
/ lib / systemd / systemd-вирішено
/ lib / systemd / systemd-rfkill
/ lib / systemd / systemd-shutdown
/ lib / systemd / systemd-shutdownnd
/ lib / systemd / systemd-socket-proxyd
/ lib / systemd / systemd-timeedated
/ lib / systemd / systemd-timesyncd
/ lib / systemd / systemd-udevd
/ lib / systemd / systemd-update-done
Підсумовуючи процес запуску systemd, я думаю, він працює приблизно так:
- systemd знаходить
basic.target
(чи всі *.target
файли?)
- Залежно вирішуються на основі
WantedBy=
, Wants=
, Before=
, After=
... директиви в [Install]
розділі про *.service
і *.target
конфігураційних файлів.
*.service
s, які повинні запускатися (які не є "спеціальними" послугами), мають [Service]
розділ з ExecStart=
директивою, яка вказує на виконання файлу для запуску.