mirror of
https://github.com/Poltern/lfs-ru.git
synced 2024-10-19 12:10:32 +03:00
6ffa2cb043
"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.
291 lines
18 KiB
XML
291 lines
18 KiB
XML
<?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 > /etc/systemd/system/getty@tty1.service.d/noclear.conf << 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 << 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><service></replaceable> [--all]</command>:
|
||
выводит список загруженных юнит-файлов типа service.</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para><command>systemctl list-units -t <replaceable><target></replaceable> [--all]</command>:
|
||
выводит список загруженных юнит-файлов типа target.</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para><command>systemctl show -p Wants <replaceable><multi-user.target></replaceable></command>:
|
||
показывает все юнит-файлы, зависящие от multi-user target (многопользовательского режима).
|
||
Target - специальные юнит-файлы, которые аналогичны уровням запуска в SysVinit.</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para><command>
|
||
systemctl status <replaceable><servicename.service></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 > /etc/systemd/coredump.conf.d/maxuse.conf << 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>
|