lfs-ru/chapter09/systemd-custom.xml
Poltern 6ffa2cb043 treewide: Use <ulink> instead of <filename> for man pages
"gcc(1)" is really not a file name.

Use <ulink> and link to the online man page on
https://man.archlinux.org/ so the user can refer to the man pages more
easily.

The change is done via a sed command and long lines are wrapped
manually.
2024-02-01 16:39:54 +05:00

291 lines
18 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-config-systemd-custom" revision="systemd">
<?dbhtml filename="systemd-custom.html"?>
<title>Настройка и использование Systemd</title>
<indexterm zone="ch-config-systemd-custom">
<primary sortas="e-Systemd">Systemd Customization</primary>
</indexterm>
<sect2>
<title>Базовая настройка</title>
<para>Файл <filename>/etc/systemd/system.conf</filename> содержит параметры для управления
основными операциями systemd. Изначально все записи в этом файле закомментированы с
указанием настроек по умолчанию. В этом файле может быть изменен уровень логирования, а также
некоторые базовые настройки ведения файлов логов. Смотрите страницу руководства
<ulink role='man' url='&man;systemd-system.conf.5'>systemd-system.conf(5)</ulink> для
получения подробной информации по каждому параметру.</para>
</sect2>
<sect2>
<title>Отключение очистки экрана во время загрузки</title>
<para>Обычным поведением systemd является очистка экрана по окончании загрузки. При желании
такое поведение можно изменить, выполнив следующую команду:</para>
<screen role="nodump"><userinput>mkdir -pv /etc/systemd/system/getty@tty1.service.d
cat &gt; /etc/systemd/system/getty@tty1.service.d/noclear.conf &lt;&lt; EOF
<literal>[Service]
TTYVTDisallocate=no</literal>
EOF</userinput></screen>
<para>Сообщения, отображаемые при загрузке всегда можно просмотреть, выполнив команду
<userinput>journalctl -b</userinput> от имени пользователя
<systemitem class="username">root</systemitem>.</para>
</sect2>
<sect2 id='systemd-no-tmpfs'>
<title>Отключение tmpfs для /tmp</title>
<para>По умолчанию каталог <filename class="directory">/tmp</filename> монтируется как
tmpfs. Если такое поведение нежелательно, его можно переопределить, выполнив
следующую команду:</para>
<screen role="nodump"><userinput>ln -sfv /dev/null /etc/systemd/system/tmp.mount</userinput></screen>
<para>В качестве альтернативы, если требуется отдельный раздел для
<filename class="directory">/tmp</filename> укажите его в <filename>/etc/fstab</filename>.</para>
<warning>
<para>
Не создавайте символическую ссылку, указанную выше, если используется отдельный раздел
для <filename class="directory">/tmp</filename>. Это помешает монтированию корневой файловой
системы (/) в режиме r/w и сделает систему непригодной для загрузки.
</para>
</warning>
</sect2>
<sect2>
<title>Настройка автоматического создания и удаления временных файлов</title>
<para>Существует несколько служб, которые создают или удаляют файлы или каталоги:</para>
<itemizedlist>
<listitem><para>systemd-tmpfiles-clean.service</para></listitem>
<listitem><para>systemd-tmpfiles-setup-dev.service</para></listitem>
<listitem><para>systemd-tmpfiles-setup.service</para></listitem>
</itemizedlist>
<para>Системные файлы конфигурации расположены в
<filename>/usr/lib/tmpfiles.d/*.conf</filename>. Локальные конфигурационные файлы находятся в
<filename class="directory">/etc/tmpfiles.d</filename>. Файлы в
<filename class="directory">/etc/tmpfiles.d</filename> переопределяют файлы с таким же именем в
<filename class="directory">/usr/lib/tmpfiles.d</filename>. Смотрите подробности по формату файла
в руководстве <ulink role='man' url='&man;tmpfiles.d.5'>tmpfiles.d(5)</ulink>.</para>
<para>
Обратите внимание, что синтаксис файлов в
<filename>/usr/lib/tmpfiles.d/*.conf</filename> может сбивать с толку.
Например, по умолчанию, удаление файлов в каталоге /tmp находится в
файле <filename>/usr/lib/tmpfiles.d/tmp.conf</filename> в строке:
<screen role="nodump">q /tmp 1777 root root 10d</screen>
q, в поле type, указывает что необходимо создать подраздел с квотами, которые применимы только
к файловым системам btrfs. Он ссылается на type v который, в свою очередь, ссылается на type d (каталог).
Затем создается указанный каталог, если он отсутствует, и настраиваются разрешения и владелец. Содержимое
каталога будет очищаться через указанный интервал времени, если указан аргумент age.
</para>
<para>
Если параметры по умолчанию не нужны, файл следует скопировать в
<filename class="directory">/etc/tmpfiles.d</filename> и отредактировать по желанию. Например:
<screen role="nodump"><userinput>mkdir -p /etc/tmpfiles.d
cp /usr/lib/tmpfiles.d/tmp.conf /etc/tmpfiles.d</userinput></screen>
</para>
</sect2>
<sect2>
<title>Переопределение поведения служб по умолчанию</title>
<para>Параметры юнита можно переопределить, создав каталог и файл конфигурации в
<filename class="directory">/etc/systemd/system</filename>. Пример для условного юнита foobar:</para>
<screen role="nodump"><userinput>mkdir -pv /etc/systemd/system/foobar.service.d
cat > /etc/systemd/system/foobar.service.d/foobar.conf &lt;&lt; EOF
<literal>[Service]
Restart=always
RestartSec=30</literal>
EOF</userinput></screen>
<para>Дополнительную информацию смотрите на странице руководства
<ulink role='man' url='&man;systemd.unit.5'>systemd.unit(5)</ulink>. После создания файла
конфигурации запустите <userinput>systemctl daemon-reload</userinput> и <userinput>systemctl
restart foobar</userinput>, чтобы активировать изменения в службе.</para>
</sect2>
<sect2>
<title>Отладка порядка загрузки служб</title>
<para>Вместо простых сценариев оболочки, используемых в системах инициализации SysVinit или BSD,
systemd использует унифицированный формат для различных типов запускаемых файлов (или юнитов).
Команда <command>systemctl</command> используется для запуска, остановки, управления состоянием
и получения статуса юнит-файлов. Ниже несколько примеров часто используемых команд:</para>
<itemizedlist>
<listitem>
<para><command>systemctl list-units -t <replaceable>&lt;service&gt;</replaceable> [--all]</command>:
выводит список загруженных юнит-файлов типа service.</para>
</listitem>
<listitem>
<para><command>systemctl list-units -t <replaceable>&lt;target&gt;</replaceable> [--all]</command>:
выводит список загруженных юнит-файлов типа target.</para>
</listitem>
<listitem>
<para><command>systemctl show -p Wants <replaceable>&lt;multi-user.target&gt;</replaceable></command>:
показывает все юнит-файлы, зависящие от multi-user target (многопользовательского режима).
Target - специальные юнит-файлы, которые аналогичны уровням запуска в SysVinit.</para>
</listitem>
<listitem>
<para><command>
systemctl status <replaceable>&lt;servicename.service&gt;</replaceable></command>:
показывает статус службы servicename. Расширение .service можно опустить, если нет
других юнит-файлов с таким же именем, например, .socket (которые создают прослушивающий
сокет, обеспечивающий функции аналогичные inetd/xinetd).</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>Работа с журналом Systemd</title>
<para>Вход в систему, загруженную с помощью systemd, обрабатывается с помощью systemd-journald
(по умолчанию), а не классическим демоном системного журнала unix. При желании, вы можете добавить
обычный демон системного журнала и заставить их работать бок о бок. Программа systemd-journald
сохраняет записи журнала в двоичном формате, а не в обычном текстовом. Для разбора лога предоставляется
команда <command>journalctl</command>. Ниже несколько примеров часто используемых команд:</para>
<itemizedlist>
<listitem>
<para><command>journalctl -r</command>: показывает все содержимое журнала в обратном
хронологическом порядке.</para>
</listitem>
<listitem>
<para><command>journalctl -u <replaceable>UNIT</replaceable></command>:
показывает записи журнала, связанные с указанным юнит-файлом.</para>
</listitem>
<listitem>
<para><command>journalctl -b[=ID] -r</command>: показывает записи журнала с момента последней
успешной загрузки (или для идентификатора загрузки) в обратном порядке хронологический порядке.</para>
</listitem>
<listitem>
<para><command>journalctl -f</command>: предоставляет функциональность, аналогичную tail -f
(режим следования).</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>Работа с дампами ядра</title>
<para>Дампы ядра полезны для отладки аварийно завершившихся программ, особенно,
когда происходит сбой процесса демона. В системах с systemd дампы ядра обрабатывается
командой <command>systemd-coredump</command>. Команда запишет дамп в журнал и сохранит
сам дамп ядра в <filename class="directory">/var/lib/systemd/coredump</filename>.
Чтобы получить и обработать дамп, предоставляется инструмент <command>coredumpctl</command>.
Несколько примеров часто используемых команд:
</para>
<itemizedlist>
<listitem>
<para><command>coredumpctl -r</command>: выводит список всех дампов в обратном
хронологическом порядке.</para>
</listitem>
<listitem>
<para><command>coredumpctl -1 info</command>: отображает информацию из последнего
дампа ядра.</para>
</listitem>
<listitem>
<para><command>coredumpctl -1 debug</command>: загружает последний дамп ядра в
<ulink url="&blfs-book;general/gdb.html">GDB</ulink>.
</para>
</listitem>
</itemizedlist>
<para>Дампы ядра могут занимать много места на диске. Можно ограничить место на диске,
занимаемое дампами ядра, создав конфигурационный файл в
<filename class="directory">/etc/systemd/coredump.conf.d</filename>.
Например:</para>
<screen role="nodump"><userinput>mkdir -pv /etc/systemd/coredump.conf.d
cat &gt; /etc/systemd/coredump.conf.d/maxuse.conf &lt;&lt; EOF
<literal>[Coredump]
MaxUse=5G</literal>
EOF</userinput></screen>
<para>Смотрите следующие страницы руководства для получения дополнительной информации
информация <ulink role='man' url='&man;systemd-coredump.8'>systemd-coredump(8)</ulink>,
<ulink role='man' url='&man;coredumpctl.1'>coredumpctl(1)</ulink> и
<ulink role='man' url='&man;coredump.conf.d.5'>coredump.conf.d(5)</ulink>.</para>
</sect2>
<sect2>
<title>Длительно выполняющиеся процессы</title>
<para>Начиная с версии systemd-230, все пользовательские процессы завершаются, когда завершается
пользовательская сессия, даже если используется nohup или процесс использует функции
<function>daemon()</function> или <function>setsid()</function>.Это намеренный переход от
исторически разрешительной среды к более ограничительной. Нововведение может вызвать проблемы,
если вы применяете долго работающие программы (такие как, <command>screen</command> или
<command>tmux</command>), чтобы оставаться активным после завершения вашей пользовательской сессии.
Есть три способа разрешить процессам работать после того, как сеанс пользователя завершен.</para>
<itemizedlist>
<listitem>
<para>
<emphasis>Включить долгосрочные процессы для выбранных пользователей</emphasis>:
Обычные пользователи имеют разрешение на включение долгосрочных процессов с помощью
команды <command>loginctl enable-linger</command> для самих себя. Системные администраторы
могут использовать ту же команду с аргументом <parameter>user</parameter> для включения
lingering'а пользователю. После этого пользователь может использовать команду
<command>systemd-run</command>, чтобы запустить длительный процесс. Например: <command>systemd-run --scope
--user /usr/bin/screen</command>. Если вы разрешите выполнение долгосрочных процессов
пользователю, то user@.service останется даже после завершения всех сеансов входа в
систему и автоматически запустится при загрузке системы. Это является преимуществом, потому
что явно разрешает и запрещает запуск процессов после завершения сеанса пользователя, но
нарушает обратную совместимость с такими инструментами, как <command>nohup</command> и
утилитами, которые используют <function>daemon()</function>.
</para>
</listitem>
<listitem>
<para>
<emphasis>Включить долгосрочные процессы в системе(глобально)</emphasis>:
Вы можете установить <parameter>KillUserProcesses=no</parameter> в
<filename>/etc/systemd/logind.conf</filename> для включения долгосрочных процессов
глобально для всех пользователей. Преимуществом этого метода является то, что
вы оставляете старый метод доступным всем пользователям за счет явного контроля.
</para>
</listitem>
<listitem>
<para>
<emphasis>Отключить во время сборки</emphasis>: вы можете запретить завершение процессов
при сборке systemd, добавив ключ <parameter>-Ddefault-kill-user-processes=false</parameter>
в команде <command>meson</command> для systemd. Это полностью отключает возможность systemd
убивать пользовательские процессы в конце сеанса.
</para>
</listitem>
</itemizedlist>
</sect2>
</sect1>