
Я конвертирую файл стиля инициализации SysV в файл модуля Systemd, и его блок раздела инициализации выглядит следующим образом:
### BEGIN INIT INFO
# Provides: ifcheck
# Required-Start: $local_fs
# Required-Stop:
# Should-Start:
# Should-Stop:
# Default-Start: S
# Default-Stop:
# Short-Description: Network interfaces check & replace
# Description: Checks if the interfaces were corrupted or if the special section is missing. If so, a default version will be copied over.
### END INIT INFO
Я знаю, что уровни выполнения 0-6 соответствуют различным целям systemd:
╔══════════════════════╦═══════════════════╗
║ Run Level (SysVinit) ║ Systemd Target ║
╠══════════════════════╬═══════════════════╣
│ Run level 0 │ poweroff.target │
├──────────────────────┼───────────────────┤
│ Run level 1 │ rescue.target │
├──────────────────────┼───────────────────┤
│ Run level 2 │ multi-user.target │
├──────────────────────┼───────────────────┤
│ Run level 3 │ multi-user.target │
├──────────────────────┼───────────────────┤
│ Run level 4 │ multi-user.target │
├──────────────────────┼───────────────────┤
│ Run level 5 │ graphical.target │
├──────────────────────┼───────────────────┤
│ Run level 6 │ reboot.target │
├──────────────────────┼───────────────────┤
│ Emergency │ emergency.target │
└──────────────────────┴───────────────────┘
(According to https://www.tecmint.com/change-runlevels-targets-in-systemd/ )
Но я никогда не видел, S
как это работает на уровне. Я виделнекоторые определения говорят, что это для одного пользователяпокаесть и другие, которые определяют его как синоним других уровней выполненияИ ещеу других нет окончательного определения.
Я знаю, что версия, с которой я работаю, скорее всего,Спецификация базовой стандартной спецификации Linuxпотому что сразу после блока информации об инициализации идет источникфункции инициализации lsb(Источник: . /lib/lsb/init-functions
). Также система работает под управлением Debian 8 Jessie.
Какую цель мне следует указать в эквивалентном файле модуля systemd для уровня выполнения S
?
решение1
S
не имеет прямого соответствия в systemd. systemd-sysv-generator
Программа не обрабатывает такие rc
скрипты Ван Смуренбурга.
ДебианРаньше у насисправленная версия этой программы, которая оборачивала rc
скрипт, который использовался S
внутри сервисного модуля без зависимостей по умолчанию и который был нужен sysinit.target
. Это было несовершенно, но затемвсеработы systemd-sysv-generator
несовершенна, поскольку не существует универсального механистического способа перевода rc
сценариев Ван Смуренбурга.
Разработчики Debian systemd убрали патч еще в июле 2016 года, когда посчитали, что все rc
скрипты van Smoorenburg в Debian, которые использовались, S
были заменены на надлежащие сервисные модули. Ваш, похоже, доморощенный.
В этом случае вам лучше полностью забыть о S
уровне выполнения. Мое обоснованное предположение, основанное не более чем на описании, заключается в том, что на самом деле вам следует создать сервисный блок, который:
DefaultDependencies=нет После=local-fs.target До=сеть-пред.цель Хочет=сеть-предварительная цельи это
Wanted-By
что-то подходящее, возможно basic.target
.
В зависимости от того, что на самом деле делает ваш сервис, такой заказ после local-fs.target
может быть излишним. Но это можете определить только вы.