Многие сценарии инициализации sysv использовали соответствующий файл, /etc/default
чтобы позволить администратору настроить его. Upstart задания могут быть изменены с помощью .override
файлов. Как переопределить или настроить модули systemd, теперь это systemd по умолчанию в Ubuntu?
109
ExecStart=
с пустой записью вы не можете добавить комментарий после него, например:ExecStart= # Empty line to clear previous entries.
Это будет считаться другойExecStart=
записью и добавляться в список. PS. Я не мог добавить комментарий к ответу Муру из-за своей низкой репутации.Ответы:
systemd
единицы не должны подчиняться файлам в/etc/default
.systemd
легко настраивается, но требует, чтобы вы знали синтаксис файлов модулей systemd.Пакеты отправляют файлы юнитов обычно в
/lib/systemd/system/
. Это не подлежит редактированию. Вместо этогоsystemd
позволяет переопределить эти файлы, создав соответствующие файлы в/etc/systemd/system/
.Для данной услуги
foo
пакет предоставит/lib/systemd/system/foo.service
. Вы можете проверить его статус с помощьюsystemctl status foo
или просмотреть его журналы с помощьюjournalctl -u foo
. Чтобы переопределить что-либо в определенииfoo
, выполните:Это создает каталог с
/etc/systemd/system
именем в честь устройства иoverride.conf
файл в этом каталоге (/etc/systemd/system/foo.service.d/override.conf
). Вы можете добавить или переопределить настройки, используя этот файл (или другие.conf
файлы в/etc/systemd/system/foo.service.d/
).Переопределение аргументов команды
Взять хотя бы
getty
сервис. Скажем, я хочу, чтобы у моего пользователя был автологин TTY2 (это не рекомендуется, а всего лишь пример). TTY2 запускаетсяgetty@tty2
службой (tty2
являющейся экземпляром шаблона/lib/systemd/system/getty@service
). Для этого мне нужно изменитьgetty@tty2
сервис.В частности, я должен изменить
ExecStart
строку, которая в настоящее время:Чтобы переопределить это, сделайте:
И добавить:
Обратите внимание, что:
ExecStart
прежде чем его снова, как это установка добавки, аналогичнаAfter
,Environment
(в целом, а не на переменную величину) иEnvironmentFile
, и в отличие от переопределения параметров , какRestartSec
илиType
.ExecStart
может иметь несколько записей только дляType=oneshot
услуг.ExecStart
находится в[Service]
разделе, так что мое переопределение также должно быть включеноExecStart
в[Service]
раздел. Часто взгляд на фактическое использование служебного файлаsystemctl cat
скажет вам, что вам нужно переопределить и в каком разделе он находится.Обычно, если вы редактируете файл системного модуля, чтобы он вступил в силу, вам нужно выполнить:
Тем
systemctl edit
не менее, автоматически делает это для вас.В настоящее время:
И если я сделаю:
и нажмите CtrlAltF2, Presto! Я войду в свой аккаунт на этом TTY.
Как я уже говорил,
getty@tty2
это экземпляр шаблона. Итак, что если я захочу переопределить все экземпляры этого шаблона? Это можно сделать, отредактировав сам шаблон (удалив идентификатор экземпляра - в данном случаеtty2
):Переопределение окружающей среды
Распространенным случаем использования
/etc/default
файлов является установка переменных среды. Обычно/etc/default
это сценарий оболочки, поэтому в нем можно использовать конструкции языка оболочки. Сsystemd
, однако, это не так. Вы можете указать переменные среды двумя способами:Через файл
Допустим, вы установили переменные среды в файле:
Затем вы можете добавить к переопределению:
В частности, если ваш
/etc/default/grub
содержит только назначения и без синтаксиса оболочки, вы можете использовать его какEnvironmentFile
.Через
Environment
записиВышесказанное также может быть выполнено с использованием следующего переопределения:
Тем не менее, это может быть сложно с несколькими переменными, пробелами и т. Д. Посмотрите на один из моих других ответов для примера такого экземпляра.
Дальнейшее чтение
Благодаря этому механизму становится очень легко переопределять
systemd
единицы, а также отменять такие изменения (просто удаляя файл переопределения). Это не единственные настройки, которые можно изменить.Следующие ссылки будут полезны:
systemd
systemd
страницах Справочника , в частности, из страницы руководствоsystemd.unit
иsystemd.service
источник
systemd.service(5)
man- страницы , раздел наExecStart
: «Если Type = oneshot, должна быть указана ровно одна команда. Когда используется Type = oneshot, можно указать ноль или более команд. Команды могут быть указаны путем предоставления нескольких командных строк в одной и той же строке. директива или, альтернативно, эта директива может быть указана более одного раза с одинаковым эффектом. Если для этой опции назначена пустая строка, список команд для запуска сбрасывается, предыдущие назначения этой опции не будут иметь никакого эффекта ».sudo rm
переопределить файл и затемsystemctl daemon-reload
, или вы можетеsystemctl edit
и заменить все в переопределении с комментариями. Комментарии в служебных файлах начинаются с#
.systemctl revert foo