<a name="top"></a>

Как использовать Systemctl для управления службами Systemd и юнитами

Экспорт в PDF

Дата создания: 2022/04/23 06:33 (C) mihanik

<p style="text-align: justify;"> Источники: </p> <ul> <li style="text-align: justify;"> <a href="https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units" rel="noopener noreferrer" target="_blank">https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units</a> </li> <li style="text-align: justify;"> <a href="https://wiki.archlinux.org/index.php/Systemd" rel="noopener noreferrer" target="_blank">https://wiki.archlinux.org/index.php/Systemd</a> </li> <li style="text-align: justify;"> man systemctl </li> <li style="text-align: justify;"> man systemd </li> </ul> <h2 style="text-align: justify;"> <a id="0" name="0"></a>Введение<br> </h2> <p style="text-align: justify;"> Systemd – это система инициализации (init system) и системный менеджер, который получил широкое распространение и становится новым стандартом для Linux-машин. Хотя существуют обоснованные сомнения в том, является ли systemd улучшением по сравнению с традиционными системами инициализации SysV, большинство дистрибутивов уже перешли на systemd, либо планируют это сделать. </p> <p style="text-align: justify;"> Коротко говоря, systemd отвечает за работу с процессами: запуск, остановку, проверку статуса, перезагрузка конфигурации и другое. Т.е. это очень важный аспект ОС, который нужно понимать и уметь им пользоваться. Если вам нужно проверить статус (работает или остановлена, успешно запущена или вылетела с ошибкой) службы, добавить службу в автозагрузку или убрать из автозагрузки, проверить список служб в автозагрузке, проверить свойства загружаемой службы или увидеть причины ошибки – то вы обращаетесь к systemd. </p> <p style="text-align: justify;"> Благодаря широкому распространению systemd среди систем Linux, знакомство с ней стоит потраченного на это время, понимание systemd сделает администрирование серверов и вашего настольного Linux значительно проще. Изучение и использование инструментов и демонов, которые охватывают systemd, поможет вам лучше оценить мощность, гибкость и возможности, которые он предоставляет, или, по крайней мере, помочь вам делать вашу работу с минимальными затыками. </p> <p style="text-align: justify;"> В этом руководстве мы обсудим команду <strong>systemctl</strong>, которая является центральным инструментом управления для контроля системы инициализации (init). Мы рассмотрим, как управлять сервисами, проверять состояния, изменять состояния системы и работать с файлами конфигурации. Мы охватим вопросы, как управлять службами, проверять статусы, изменять состояния системы и работать с конфигурационными файлами. </p> <p style="text-align: justify;"> Обратите внимание: несмотря на то, что systemd стала стандартной системой инициализации для многих дистрибутивов Linux, она не реализована повсеместно во всех дистрибутивах. По мере прохождения этого руководства, если ваш терминал выводит ошибку <strong>bash: systemctl не установлен, (bash: systemctl is not installed)</strong>, <strong>то </strong>вероятно, на вашем компьютере установлена другая система инициализации. </p> <h2 style="text-align: justify;"> <a id="1" name="1"></a>Управление службами<br> </h2> <p style="text-align: justify;"> Основная цель init системы – это инициализировать компоненты, которые должны запускаться после загрузки ядра Linux (традиционно называемые «userland» («пользовательскими») компонентами). Система init также используется для управления службами и демонами компьютера под управлением Linux в любой момент во время работы системы. Имея это в виду, мы начнем с некоторых простых операций управления службами. </p> <p style="text-align: justify;"> В systemd целью (объектами) большинства действий являются «<strong>юниты</strong>» (units), которые представляют собой ресурсы, которыми systemd знает как управлять. Юниты классифицируются по типу ресурса, который они представляют, и определяются файлами, известными как файлы юнитов. Тип каждого юнита может быть определён по&nbsp;суффиксу&nbsp;в конце файла. </p> <p style="text-align: justify;"> Для задач управления службой, целевым&nbsp;юнитом является юнит&nbsp;службы, которые имеют файлы юнитов с суффиксом <strong>.service</strong>. Тем не менее, для большинства команд управления службой вы фактически можете отбросить суффикс <strong>.service</strong>, поскольку systemd достаточно умён, чтобы знать, что вы, вероятно, хотите работать с сервисом при использовании команд управления службой. </p> <h3 style="text-align: justify;"> <a id="11" name="11"></a>Запуск и остановка служб<br> </h3> <p style="text-align: justify;"> Чтобы запустить службу systemd, выполнив инструкции в файле юнита, используйте команду <strong>start</strong>. Если вы работаете как пользователь без полномочий root, вам придется использовать <strong>sudo</strong>, поскольку выполняемая команда повлияет на состояние операционной системы: </p> <div><div id="highlighter_892157" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">sudo</code> <code class="bash plain">systemctl start приложение.service</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Как мы уже упоминали выше, systemd знает, что нужно искать файлы <strong>*.service</strong> для команд управления службами, поэтому эту команду можно без проблем ввести следующим образом: </p> <div><div id="highlighter_225532" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">sudo</code> <code class="bash plain">systemctl start приложение</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Хотя вы можете использовать вышеуказанный формат для обычного администрирования, для ясности в остальной части команд мы будем использовать суффикс <strong>.service</strong>, чтобы быть явным в отношении цели, над которой мы работаем. </p> <p style="text-align: justify;"> Чтобы остановить текущую службу, используется команда <strong>stop</strong>: </p><div class="576fa40ea81d72e15bb77373cb701737" data-index="5" style="float: none; margin:10px 0 10px 0; text-align:center;"> <ins class="adsbygoogle" style="display:block; text-align:center;" data-ad-format="fluid" data-ad-layout="in-article" data-ad-client="ca-pub-7219829351026140" data-ad-slot="2757062112"></ins> </div> <div><div id="highlighter_850754" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">sudo</code> <code class="bash plain">systemctl stop приложение.service</code></div></div></td></tr></tbody></table></div></div> <h3 style="text-align: justify;"> <a id="12" name="12"></a>Перезапуск и перезагрузка<br> </h3> <p style="text-align: justify;"> Чтобы перезапустить запущенную службу, вы можете использовать команду <strong>restart</strong>: </p> <div><div id="highlighter_317793" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">sudo</code> <code class="bash plain">systemctl restart приложение.service</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Если рассматриваемое приложение может перезагрузить свои файлы конфигурации (без перезапуска), вы можете выполнить команду <strong>reload</strong>, чтобы инициировать этот процесс: </p> <div><div id="highlighter_901246" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">sudo</code> <code class="bash plain">systemctl reload приложение.service</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Если вы не знаете, есть ли у службы функциональность для перезагрузки конфигурации, вы можете выполнить команду <strong>reload-or-restart</strong>. Она перезагрузит&nbsp;конфигурацию, если приложение поддерживает это. В противном случае она перезапустит службу, чтобы была подхвачена новая конфигурация: </p> <div><div id="highlighter_617223" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">sudo</code> <code class="bash plain">systemctl reload-or-restart приложение.service</code></div></div></td></tr></tbody></table></div></div> <h3 style="text-align: justify;"> <a id="13" name="13"></a>Включение и отключение служб<br> </h3> <p style="text-align: justify;"> Вышеупомянутые команды полезны для запуска или остановки команд во время текущего сеанса. Чтобы система systemd автоматически запускала службы при загрузке компьютера, вы должны включить их. </p> <p style="text-align: justify;"> Чтобы запустить службу при загрузке, используйте команду <strong>enable</strong>: </p> <div><div id="highlighter_227484" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">sudo</code> <code class="bash plain">systemctl </code><code class="bash functions">enable</code> <code class="bash plain">приложение.service</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Это создаст символическую ссылку из копии файла системной службы (обычно в <strong>/lib/systemd/system</strong> или <strong>/etc/systemd/system</strong>) в место на диске, где systemd ищет файлы автозапуска (обычно <strong>/etc/systemd/system/некая_цель.target.wants</strong>). Мы перейдем к тому, что такое цель (target), позже в этом руководстве). </p> <p style="text-align: justify;"> Чтобы отключить автоматический запуск службы, вы можете набрать: </p> <div><div id="highlighter_255930" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">sudo</code> <code class="bash plain">systemctl disable приложение.service</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Это приведет к удалению символической ссылки, указывающей, что служба должна запускаться автоматически. </p> <p style="text-align: justify;"> Имейте в виду, что включение службы не запускает ее в текущем сеансе. Если вы хотите запустить службу и включить ее при загрузке, вам придется выпустить команды <strong>start </strong>и <strong>enable</strong>.&nbsp;Чтобы одновременно добавить службу в автозагрузку и запустить её, используйте ключ <strong>--now</strong>: </p> <div><div id="highlighter_733428" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl </code><code class="bash functions">enable</code> <code class="bash plain">--now apache2.service</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Приведённая команда добавить веб-сервер Apache в автозагрузку и немедленно запустит его. </p> <p style="text-align: justify;"> Переключатель <strong>--now</strong> работает с командами <strong>enable</strong>, <strong>disable </strong>и <strong>mask</strong>, соответственно для немедленного запуска, остановки или маскировки юнита, без ожидания следующей загрузки. </p> <h3 style="text-align: justify;"> <a id="14" name="14"></a>Символ @ («собака») в именах служб<br> </h3> <p style="text-align: justify;"> Некоторые имена юнитов содержат символ <strong>@</strong> (т.е. name@string.service): это означает, что они являются экземплярами юнита-шаблона, чьё действительное имя не содержит часть, которая в условном примере обозначена как <strong>string </strong>(т.е. name@.service). <strong>string </strong>называется идентификатором экземпляра и аналогична аргументу, который передается юниту-шаблону&nbsp;при вызове с помощью команды systemctl: в файле юнита он будет заменять спецификатор <strong>%i</strong>. </p> <p style="text-align: justify;"> Для большей точности работы, перед попыткой создать экземпляр name@.suffix юнита-шаблона, systemd действительно ищет юнит с точным именем файла name@string.suffix, даже не смотря на то, что такие&nbsp;«конфликты» довольно редки, так как большинство файлов юнитов, содержащих&nbsp;знак <strong>@</strong>, подразумевают использование шаблонов. Кроме того, если юнит-шаблон вызывается без идентификатора экземпляра, ничего не получится, так как спецификатор <strong>%i</strong> не может быть подставлен. </p> <p style="text-align: justify;"> К примеру, в файле юнита OpenVPN: </p> <div><div id="highlighter_290703" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl </code><code class="bash functions">cat</code> <code class="bash plain">openvpn-server@server.service</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> содержится строка: </p><div class="576fa40ea81d72e15bb77373cb701737" data-index="6" style="float: none; margin:10px 0 10px 0; text-align:center;"> </div> <div><div id="highlighter_371509" class="syntaxhighlighter bash"><div style="overflow-x:scroll;" data-responsive="res-div"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">ExecStart=</code><code class="bash plain">/usr/bin/openvpn</code> <code class="bash plain">--status %t</code><code class="bash plain">/openvpn-server/status-</code><code class="bash plain">%i.log --status-version 2 --suppress-timestamps --config %i.conf</code></div></div></td></tr></tbody></table></div></div></div> <p style="text-align: justify;"> В этой строке виден спецификатор <strong>%i</strong>, при его замене получится имя файла логов и файла конфигурации. </p> <p style="text-align: justify;"> Используя различные значения <strong>string</strong>, можно добиться настройки автозапуска OpenVPN с различными конфигурационными файлами. Например: </p> <div><div id="highlighter_941872" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl </code><code class="bash functions">enable</code> <code class="bash plain">openvpn-server@port_tcp_443</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Этой командой служба OpenVPN будет добавлена в автозапуск, при этом она будет запускаться с конфигурационным файлом <strong>/etc/openvpn/server/port_tcp_443.conf</strong>. Используя такой подход, можно настроить автозапуск одной и той же службы с разными конфигурациями. Например, OpenVPN на разных портах. </p> <p style="text-align: justify;"> Многие службы поддерживают модель шаблоны-экземпляры. К примеру, Apache2: </p> <div><div id="highlighter_896630" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl </code><code class="bash functions">enable</code> <code class="bash plain">apache2@</code><code class="bash functions">test</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Эта команда приведёт к тому, что значение переменной окружения <strong>APACHE_CONFDIR</strong> будет установлено на <strong>/etc/apache2-test</strong>. </p> <h3 style="text-align: justify;"> <a id="15" name="15"></a>Проверка состояния служб<br> </h3> <p style="text-align: justify;"> Чтобы проверить статус службы в вашей системе, вы можете использовать команду <strong>status</strong>: </p> <div><div id="highlighter_956842" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl status приложение.service</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Это выведет состояние службы, иерархию cgroup и первые несколько строк журнала. </p> <p style="text-align: justify;"> Например, при проверке состояния веб-сервера Apache вы можете увидеть вывод следующим образом: </p> <div><div id="highlighter_177243" class="syntaxhighlighter plain"><div style="overflow-x:scroll;" data-responsive="res-div"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain plain">● apache2.service - The Apache HTTP Server</code></div><div class="line number2 index1 alt1"><code class="plain spaces">&nbsp;&nbsp;&nbsp;</code><code class="plain plain">Loaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor preset: disabled)</code></div><div class="line number3 index2 alt2"><code class="plain spaces">&nbsp;&nbsp;&nbsp;</code><code class="plain plain">Active: active (running) since Mon 2018-04-30 08:11:26 MSK; 11s ago</code></div><div class="line number4 index3 alt1"><code class="plain spaces">&nbsp;&nbsp;</code><code class="plain plain">Process: 2650 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)</code></div><div class="line number5 index4 alt2"><code class="plain spaces">&nbsp;</code><code class="plain plain">Main PID: 2661 (apache2)</code></div><div class="line number6 index5 alt1"><code class="plain spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain plain">Tasks: 7 (limit: 4580)</code></div><div class="line number7 index6 alt2"><code class="plain spaces">&nbsp;&nbsp;&nbsp;</code><code class="plain plain">Memory: 31.1M</code></div><div class="line number8 index7 alt1"><code class="plain spaces">&nbsp;&nbsp;&nbsp;</code><code class="plain plain">CGroup: /system.slice/apache2.service</code></div><div class="line number9 index8 alt2"><code class="plain spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain plain">├─2661 /usr/sbin/apache2 -k start</code></div><div class="line number10 index9 alt1"><code class="plain spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain plain">├─2662 /usr/sbin/apache2 -k start</code></div><div class="line number11 index10 alt2"><code class="plain spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain plain">├─2663 /usr/sbin/apache2 -k start</code></div><div class="line number12 index11 alt1"><code class="plain spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain plain">├─2664 /usr/sbin/apache2 -k start</code></div><div class="line number13 index12 alt2"><code class="plain spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain plain">├─2665 /usr/sbin/apache2 -k start</code></div><div class="line number14 index13 alt1"><code class="plain spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain plain">├─2666 /usr/sbin/apache2 -k start</code></div><div class="line number15 index14 alt2"><code class="plain spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="plain plain">└─2667 /usr/sbin/apache2 -k start</code></div><div class="line number16 index15 alt1">&nbsp;</div><div class="line number17 index16 alt2"><code class="plain plain">апр 30 08:11:25 HackWare systemd[1]: Starting The Apache HTTP Server...</code></div><div class="line number18 index17 alt1"><code class="plain plain">апр 30 08:11:26 HackWare apachectl[2650]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message</code></div><div class="line number19 index18 alt2"><code class="plain plain">апр 30 08:11:26 HackWare systemd[1]: Started The Apache HTTP Server.</code></div></div></td></tr></tbody></table></div></div></div> <p style="text-align: justify;"> <a href="https://hackware.ru/wp-content/uploads/2018/05/1.png"><img alt="" class="alignnone size-full wp-image-5463" src="https://hackware.ru/wp-content/uploads/2018/05/1.png" srcset="https://hackware.ru/wp-content/uploads/2018/05/1.png 858w, https://hackware.ru/wp-content/uploads/2018/05/1-300x192.png 300w, https://hackware.ru/wp-content/uploads/2018/05/1-768x491.png 768w" sizes="(max-width: 858px) 100vw, 858px" width="858" height="549"></a> </p> <p style="text-align: justify;"> Это даёт вам хороший обзор текущего состояния приложения, уведомляет вас о любых проблемах и любых действиях, которые могут потребоваться. </p> <p style="text-align: justify;"> Существуют также методы проверки конкретных состояний. Например, чтобы проверить, активен ли данный элемент (работает), вы можете использовать команду <strong>is-active</strong>: </p> <div><div id="highlighter_476238" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl is-active приложение.service</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Это вернет текущее состояние юнита, которое обычно является <strong>active </strong>или <strong>inactive</strong>. Код выхода будет «0», если он активен, делая результат проще для парсинга программами и скриптами. </p> <p style="text-align: justify;"> Чтобы узнать, включён ли юнит для автозапуска, вы можете использовать команду <strong>is-enabled</strong>: </p> <div><div id="highlighter_226250" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl is-enabled приложение.service</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Будет выведено <strong>enabled </strong>или <strong>disabled</strong>, и снова код выхода будет установлен на «0» или «1» в зависимости от ответа на вопрос команды. </p> <p style="text-align: justify;"> Третья проверка заключается в том, находится ли устройство в состоянии сбоя. Это указывает на то, что возникла проблема с запуском рассматриваемого юнита: </p> <div><div id="highlighter_4163" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl is-failed приложение.service</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Это вернёт <strong>active</strong>, если он работает правильно или <strong>failed</strong>, если произошла ошибка. Если устройство было намеренно остановлено, то может быть возвращено unknown или inactive. Состояние выхода «0» означает, что произошел сбой, а статус выхода «1» указывает на любой другой статус. </p> <p style="text-align: justify;"> Следующая команда покажет сразу все завершившиеся неудачей юниты: </p> <div><div id="highlighter_101513" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl --failed</code></div></div></td></tr></tbody></table></div></div> <h2 style="text-align: justify;"> <a id="2" name="2"></a>Обзор состояния системы<br> </h2> <p style="text-align: justify;"> Команды до сих пор были полезны для управления отдельными службами, но они не очень полезны для изучения текущего состояния системы. Существует несколько команд systemctl, которые предоставляют эту информацию. </p> <h3 style="text-align: justify;"> <a id="21" name="21"></a>Список текущих юнитов<br> </h3> <p style="text-align: justify;"> Чтобы просмотреть список всех активных юнитов, о которых система знает, мы можем использовать команду <strong>list-units</strong>: </p> <div><div id="highlighter_120425" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl list-</code><code class="bash functions">units</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Это покажет вам список всех юнитов, которые в настоящее время systemd имеет в статусе <strong>active</strong>. Результат будет выглядеть примерно так: </p> <p style="text-align: justify;"> <a href="https://hackware.ru/wp-content/uploads/2018/05/2.png"><img loading="lazy" alt="" class="alignnone size-full wp-image-5464" src="https://hackware.ru/wp-content/uploads/2018/05/2.png" srcset="https://hackware.ru/wp-content/uploads/2018/05/2.png 1919w, https://hackware.ru/wp-content/uploads/2018/05/2-300x149.png 300w, https://hackware.ru/wp-content/uploads/2018/05/2-768x381.png 768w, https://hackware.ru/wp-content/uploads/2018/05/2-1024x507.png 1024w" sizes="(max-width: 1919px) 100vw, 1919px" width="1919" height="951"></a> </p> <p style="text-align: justify;"> Вывод имеет следующие столбцы: </p> <ul> <li style="text-align: justify;"> <strong>UNIT</strong>: Имя юнита systemd </li> <li style="text-align: justify;"> <strong>LOAD</strong>: Была ли конфигурация юнита успешно спарсена (разобрана) в systemd. Конфигурации загруженных юнитов хранится в памяти. </li> <li style="text-align: justify;"> <strong>ACTIVE</strong>: Результирующее состояние о том, активен ли юнит. Это обычно довольно простой способ однозначно ответить на вопрос: юнит запустился успешно или нет. </li> <li style="text-align: justify;"> <strong>SUB</strong>: Это состояние более низкого уровня, которое указывает более подробную информацию об устройстве. Это часто зависит от типа устройства, состояния и фактического метода, в котором работает устройство. </li> <li style="text-align: justify;"> <strong>DESCRIPTION</strong>: Короткое текстовое описание, что юнит из себя представляет/делает. </li> </ul> <p style="text-align: justify;"> Поскольку команда <strong>list-units</strong> показывает по умолчанию только активные юниты, все вышеперечисленные записи будут отображаться как «<strong>loaded</strong>» в столбце <strong>LOAD </strong>и «<strong>active</strong>» в столбце <strong>ACTIVE</strong>. Такое отображение фактически является поведением <strong>systemctl </strong>по умолчанию при вызове без дополнительных команд, поэтому вы увидите то же самое, если вы вызываете systemctl без аргументов: </p> <div><div id="highlighter_810369" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Мы можем сказать systemctl выводить различную информацию, используя дополнительные флаги. Например, чтобы увидеть все юниты, которые systemd загрузила (или попыталась загрузить), независимо от того, активны ли они в данный момент, вы можете использовать флаг <strong>--all</strong>, например: </p> <div><div id="highlighter_22451" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl list-</code><code class="bash functions">units</code> <code class="bash plain">--all</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Это покажет любой юнит, который система загрузила или попыталась загрузить, независимо от текущего состояния в системе. После запуска некоторые юниты становятся неактивными, а некоторые юниты, которые пыталась загрузить systemd, не могли быть найдены на диске. </p> <p style="text-align: justify;"> Вы можете использовать другие флаги для фильтрации этих результатов. Например, мы можем использовать <strong>--state=</strong> флаг для указания состояний <strong>LOAD</strong>, <strong>ACTIVE </strong>или <strong>SUB</strong>, которые мы хотим видеть. Также нужно указывать флаг <strong>--all</strong>, чтобы systemctl позволяла отображать неактивные юниты: </p> <div><div id="highlighter_101989" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl list-</code><code class="bash functions">units</code> <code class="bash plain">--all --state=inactive</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Другим распространенным фильтром является фильтр <strong>--type=</strong>. Мы можем сказать systemctl отображать только те юниты, которые нас интересуют. Например, чтобы видеть только активные юниты служб, мы можем использовать: </p> <div><div id="highlighter_470408" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl list-</code><code class="bash functions">units</code> <code class="bash plain">--</code><code class="bash functions">type</code><code class="bash plain">=service</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> или: </p> <div><div id="highlighter_685118" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl --</code><code class="bash functions">type</code><code class="bash plain">=service</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Предыдущая команда покажет только активные службы, для вывода информации о всех службах добавьте ключ <strong>--all</strong>: </p> <div><div id="highlighter_473062" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl --</code><code class="bash functions">type</code><code class="bash plain">=service --all</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Вы можете явно указать статус модулей, список которых хотите получить. Для этого используйте команду: </p> <div><div id="highlighter_182995" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl list-</code><code class="bash functions">units</code> <code class="bash plain">--</code><code class="bash functions">type</code><code class="bash plain">=service --state=СТАТУС</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> или: </p> <div><div id="highlighter_86908" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl --</code><code class="bash functions">type</code><code class="bash plain">=service --state=СТАТУС</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> В качестве <strong>СТАТУСа</strong> могут быть значения: </p> <ul> <li style="text-align: justify;"> <strong>active</strong> </li> <li style="text-align: justify;"> <strong>inactive</strong> </li> <li style="text-align: justify;"> <strong>running</strong> </li> <li style="text-align: justify;"> <strong>exited</strong> </li> <li style="text-align: justify;"> <strong>dead</strong> </li> <li style="text-align: justify;"> <strong>loaded</strong> </li> <li style="text-align: justify;"> <strong>not-found</strong> </li> <li style="text-align: justify;"> <strong>plugged</strong> </li> <li style="text-align: justify;"> <strong>mounted</strong> </li> <li style="text-align: justify;"> <strong>waiting</strong> </li> <li style="text-align: justify;"> <strong>listening</strong> </li> </ul> <p style="text-align: justify;"> Например, вывод служб, которые завершили свою работу: </p> <div><div id="highlighter_530500" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl --</code><code class="bash functions">type</code><code class="bash plain">=service --state=exited</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Вывод служб, которые запущены в данный момент: </p> <div><div id="highlighter_229724" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl list-</code><code class="bash functions">units</code> <code class="bash plain">--</code><code class="bash functions">type</code><code class="bash plain">=service --state=running</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Или: </p><div class="576fa40ea81d72e15bb77373cb701737" data-index="9" style="float: none; margin:10px 0 10px 0; text-align:center;"> <!-- HackWare.ru - блок ссылок - середина2 --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-7219829351026140" data-ad-slot="7663666599" data-ad-format="link"></ins> <hr> <!-- Yandex.RTB R-A-232717-9 --> <div id="yandex_rtb_R-A-232717-9"><yatag class="LgqzYt"><yatag class="bNGvAO" style="width: 1160px !important; height: 332px !important;"><yatag class="cZWmzW"><yatag class="bIuZli"><yatag class="buaSLb" style="width: 1160px !important; height: 332px !important; transform: translate(116.4px, -4849.28px) !important;"><yatag class="cTCiJJ" style="width: 100% !important; height: 648px !important;"><div id="266ec21c" style="background-color: rgb(0, 0, 51) !important; justify-content: center !important; align-items: center !important; box-sizing: content-box !important; display: flex !important; height: 616px !important; width: 100% !important; padding: 16px 0px !important;"><yatag class="w64dc730c s6f8cc3cf"><yatag class="c2f301af1"></yatag><yatag class="x2359da01 he8809e9 y7a6ae75 x52634440"><yatag style="width: 970px !important; height: 250px !important;" class="y24661a46"><yatag id="ya_partner_R-A-232717-9" style="width: 970px !important; height: 250px !important; transform: none !important;" class="y4610caf1"><yatag class="f861573d7 j885683b0" data-label="true"><yatag data-test="AdKebabAndLabel--adLabelBg" class="veccc7f72"></yatag>Реклама</yatag><yatag class="a622b0aae x9450aca8 sc8b559a8"><yatag data-close="true" data-new-adtune="true" class="aa2cd469e wc2b1230b j885683b0 wbfbd8b03"><yatag class="of54201bb"></yatag><yatag class="nb3822a75"><svg width="8" height="20" fill="#fff" xmlns="http://www.w3.org/2000/svg"><circle cx="4" cy="4" r="1.5"></circle><circle cx="4" cy="10" r="1.5"></circle><circle cx="4" cy="16" r="1.5"></circle></svg></yatag></yatag></yatag><iframe scrolling="no" allowtransparency="true" hidefocus="true" tabindex="-1" marginwidth="0" marginheight="0" style="opacity: 1;" src="https://yastatic.net/safeframe-bundles/0.83/1-1-0/protected/render.html" sandbox="allow-same-origin allow-popups allow-popups-to-escape-sandbox allow-scripts allow-forms" id="id7801" frameborder="no"></iframe></yatag></yatag></yatag></yatag></div></yatag></yatag></yatag></yatag></yatag></yatag></div> </div> <div><div id="highlighter_728984" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl --</code><code class="bash functions">type</code><code class="bash plain">=service --state=running</code></div></div></td></tr></tbody></table></div></div> <h3 style="text-align: justify;"> <a id="22" name="22"></a>Вывод списка всех файлов юнитов<br> </h3> <p style="text-align: justify;"> Команда <strong>list-units</strong> отображает только юниты, которые systemd попыталась разобрать и загрузить в память. Поскольку systemd будет читать только юниты, которые, по её мнению, нужны, список не обязательно будет включать все доступные юниты в системе. Чтобы просмотреть каждый доступный файл юнита в путях systemd, включая те, которые systemd не пыталась загрузить, вместо этого вы можете использовать команду <strong>list-unit-files</strong>: </p> <div><div id="highlighter_448956" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl list-unit-files</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Юниты являются представлением ресурсов, о которых знает systemd. Поскольку systemd не обязательно читает все определения юнитов в этом представлении, она показывает только информацию о самих файлах. Вывод состоит из двух столбцов: файла юнита и состояние. </p> <p style="text-align: justify;"> <a href="https://hackware.ru/wp-content/uploads/2018/05/3.png"><img loading="lazy" alt="" class="alignnone size-full wp-image-5465" src="https://hackware.ru/wp-content/uploads/2018/05/3.png" srcset="https://hackware.ru/wp-content/uploads/2018/05/3.png 590w, https://hackware.ru/wp-content/uploads/2018/05/3-174x300.png 174w" sizes="(max-width: 590px) 100vw, 590px" width="590" height="1018"></a> </p> <p style="text-align: justify;"> Если вы хотите посмотреть только юниты, добавленные в автозагрузку, то используйте следующую конструкцию: </p> <div><div id="highlighter_693032" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl list-unit-files | </code><code class="bash functions">grep</code> <code class="bash plain">enabled</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Этими состояниями обычно являются «enabled», «disabled», «static» или «masked». В этом контексте static означает, что в файле unit не содержится раздел «install», который используется для включения устройства. Таким образом, эти блоки не могут быть включены. Обычно это означает, что устройство выполняет одноразовое действие или используется только как зависимость другого устройства и не должно запускаться само по себе. </p> <p style="text-align: justify;"> Чуть ниже мы рассмотрим, что означает «<strong>masked</strong>». </p> <h2 style="text-align: justify;"> <a id="3" name="3"></a>Управление юнитами<br> </h2> <p style="text-align: justify;"> До сих пор мы работали со службами и отображали информацию о юнитах и единичных файлах, о которых знает systemd. Однако мы можем узнать более конкретную информацию о юнитах, используя некоторые дополнительные команды. </p> <h3 style="text-align: justify;"> <a id="31" name="31"></a>Показ файла юнита<br> </h3> <p style="text-align: justify;"> Чтобы отобразить файл юнита, который systemd загрузила в свою систему, вы можете использовать команду <strong>cat </strong>(она была добавлена в версии systemd 209). Например, чтобы увидеть файл юнита веб-сервера Apache, мы можем ввести: </p> <div><div id="highlighter_965818" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl </code><code class="bash functions">cat</code> <code class="bash plain">apache2.service</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Будет показано что-то вроде: </p> <div><div id="highlighter_356461" class="syntaxhighlighter plain"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain plain">[Unit]</code></div><div class="line number2 index1 alt1"><code class="plain plain">Description=The Apache HTTP Server</code></div><div class="line number3 index2 alt2"><code class="plain plain">After=network.target remote-fs.target nss-lookup.target</code></div><div class="line number4 index3 alt1">&nbsp;</div><div class="line number5 index4 alt2"><code class="plain plain">[Service]</code></div><div class="line number6 index5 alt1"><code class="plain plain">Type=forking</code></div><div class="line number7 index6 alt2"><code class="plain plain">Environment=APACHE_STARTED_BY_SYSTEMD=true</code></div><div class="line number8 index7 alt1"><code class="plain plain">ExecStart=/usr/sbin/apachectl start</code></div><div class="line number9 index8 alt2"><code class="plain plain">ExecStop=/usr/sbin/apachectl stop</code></div><div class="line number10 index9 alt1"><code class="plain plain">ExecReload=/usr/sbin/apachectl graceful</code></div><div class="line number11 index10 alt2"><code class="plain plain">PrivateTmp=true</code></div><div class="line number12 index11 alt1"><code class="plain plain">Restart=on-abort</code></div><div class="line number13 index12 alt2">&nbsp;</div><div class="line number14 index13 alt1"><code class="plain plain">[Install]</code></div><div class="line number15 index14 alt2"><code class="plain plain">WantedBy=multi-user.target</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Будет выведен файл юнита как он известен текущему работающему процессу systemd. Это может быть важно, если вы недавно модифицировали файлы юнитов, или если вы переопределяете некоторые параметры в фрагменте файла юнита (мы расскажем об этом позже). </p> <h3 style="text-align: justify;"> <a id="32" name="32"></a>Отображение зависимостей<br> </h3> <p style="text-align: justify;"> Чтобы увидеть дерево зависимостей юнита, вы можете использовать команду <strong>list-dependencies</strong>: </p> <div><div id="highlighter_791863" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl list-dependencies </code><code class="bash functions">ssh</code><code class="bash plain">.service</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Это отобразит иерархию, сопоставляющую зависимости, с которыми необходимо иметь дело, чтобы запустить рассматриваемый юнит. Зависимости в этом контексте включают те юниты, которые требуются или ищутся юнитами, расположенными над ним. </p> <p style="text-align: justify;"> <a href="https://hackware.ru/wp-content/uploads/2018/05/4.png"><img loading="lazy" alt="" class="alignnone size-full wp-image-5466" src="https://hackware.ru/wp-content/uploads/2018/05/4.png" srcset="https://hackware.ru/wp-content/uploads/2018/05/4.png 858w, https://hackware.ru/wp-content/uploads/2018/05/4-300x274.png 300w, https://hackware.ru/wp-content/uploads/2018/05/4-768x702.png 768w" sizes="(max-width: 858px) 100vw, 858px" width="858" height="784"></a> </p> <p style="text-align: justify;"> Рекурсивные зависимости отображаются только для юнитов <strong>.target</strong>, которые указывают состояния системы. Чтобы рекурсивно перечислить все зависимости, включите флаг <strong>--all</strong>. </p> <p style="text-align: justify;"> Чтобы показать обратные зависимости (юниты, зависящие от указанного юнита), вы можете добавить в команду флаг <strong>--reverse</strong>. Другими полезными флагами являются флаги <strong>--before</strong> и <strong>--after</strong>, которые могут использоваться для отображения юнитов, которые зависят от указанного устройства, начиная с до и после себя, соответственно. </p> <h3 style="text-align: justify;"> <a id="33" name="33"></a>Проверка свойств юнита<br> </h3> <p style="text-align: justify;"> Чтобы увидеть низкоуровневые свойства юнита, вы можете использовать команду <strong>show</strong>. Она отобразит список свойств, заданных для указанного юнита, используя формат <strong>ключ=значение</strong>: </p> <div><div id="highlighter_729689" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl show sshd.service</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> <a href="https://hackware.ru/wp-content/uploads/2018/05/5.png"><img loading="lazy" alt="" class="alignnone size-full wp-image-5467" src="https://hackware.ru/wp-content/uploads/2018/05/5.png" srcset="https://hackware.ru/wp-content/uploads/2018/05/5.png 349w, https://hackware.ru/wp-content/uploads/2018/05/5-122x300.png 122w" sizes="(max-width: 349px) 100vw, 349px" width="349" height="856"></a> </p> <p style="text-align: justify;"> Если вы хотите отобразить одно свойство, вы можете передать с флагом <strong>-p</strong> имя свойства. Например, чтобы увидеть конфликты, которые имеет юнит ssh.socket, вы можете ввести: </p> <div><div id="highlighter_314818" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl show </code><code class="bash functions">ssh</code><code class="bash plain">.socket -p Conflicts</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> <a href="https://hackware.ru/wp-content/uploads/2018/05/6.png"><img loading="lazy" alt="" class="alignnone size-full wp-image-5468" src="https://hackware.ru/wp-content/uploads/2018/05/6.png" srcset="https://hackware.ru/wp-content/uploads/2018/05/6.png 508w, https://hackware.ru/wp-content/uploads/2018/05/6-300x27.png 300w" sizes="(max-width: 508px) 100vw, 508px" width="508" height="46"></a> </p> <h3 style="text-align: justify;"> <a id="34" name="34"></a>Применение и снятие маски юнитов<br> </h3> <p style="text-align: justify;"> В разделе управления службами мы рассмотрели, как остановить или отключить службу, но systemd также имеет возможность пометить устройство как полностью неспособное к запуску, автоматически или вручную, связав его с <strong>/dev/null</strong>. Это называется маскировкой юнитов и возможно с помощью команды <strong>mask</strong>: </p> <div><div id="highlighter_175329" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">sudo</code> <code class="bash plain">systemctl mask nginx.service</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Это предотвратит запуск службы Nginx, автоматически или вручную, до тех пор, пока она замаскирована. </p> <p style="text-align: justify;"> Если вы проверите <strong>list-unit-files</strong>, вы увидите, что служба теперь отображается как <strong>masked </strong>(замаскированная): </p> <div><div id="highlighter_886546" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl list-unit-files</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> <a href="https://hackware.ru/wp-content/uploads/2018/05/7.png"><img loading="lazy" alt="" class="alignnone size-full wp-image-5469" src="https://hackware.ru/wp-content/uploads/2018/05/7.png" srcset="https://hackware.ru/wp-content/uploads/2018/05/7.png 856w, https://hackware.ru/wp-content/uploads/2018/05/7-300x49.png 300w, https://hackware.ru/wp-content/uploads/2018/05/7-768x125.png 768w" sizes="(max-width: 856px) 100vw, 856px" width="856" height="139"></a> </p> <p style="text-align: justify;"> Если вы попытаетесь запустить службу, вы увидите следующее сообщение: </p> <div><div id="highlighter_140708" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div><div class="line number2 index1 alt1">2</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">sudo</code> <code class="bash plain">systemctl start nginx.service</code></div><div class="line number2 index1 alt1"><code class="bash plain">Failed to start nginx.service: Unit nginx.service is masked.</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Чтобы снять маску с юнита, сделав его доступным для использования снова, просто используйте команду <strong>unmask</strong>: </p> <div><div id="highlighter_335631" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">sudo</code> <code class="bash plain">systemctl unmask nginx.service</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Это вернет юнит в прежнее состояние, позволяя ему запускаться или включаться. </p> <h2 style="text-align: justify;"> <a id="4" name="4"></a>Редактирование файлов юнитов<br> </h2> <p style="text-align: justify;"> Хотя в этом руководстве мы не будет затрагивать вопрос формата файлов юнитов, знайте, что systemctl предоставляет встроенные механизмы для редактирования и изменения файлов юнитов, если вам нужно внести коррективы. Эта функциональность была добавлена в systemd версии 218. </p> <p style="text-align: justify;"> Команда <strong>edit </strong>по умолчанию откроет фрагмент файла юнита для данного элемента: </p> <div><div id="highlighter_120822" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">sudo</code> <code class="bash plain">systemctl edit </code><code class="bash functions">ssh</code><code class="bash plain">.socket</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Это будет пустой файл, который может использоваться для переназначения или добавления директив к определению юнита. Будет создана директория внутри директории <strong>/etc/systemd/system</strong>, которая содержит имя юнита с добавленным <strong>.d</strong>. Например, для службы <strong>ssh.socket</strong> будет создана директория <strong>/etc/systemd/system/ssh.socket.d/</strong>. </p> <p style="text-align: justify;"> Внутри этой директории будет создан сниппет (фрагмент)&nbsp; с именем <strong>override.conf</strong>. Когда загружается юнит, systemd будет в памяти объединять фрагмент переопределения с полным файлом юнита. Директивы фрагмента будут иметь приоритет над теми, что указаны в исходном файле юнита. </p> <p style="text-align: justify;"> Если вы хотите отредактировать полный файл юнита вместо создания фрагмента, вы можете передать флаг <strong>--full</strong>: </p> <div><div id="highlighter_908272" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">sudo</code> <code class="bash plain">systemctl edit --full </code><code class="bash functions">ssh</code><code class="bash plain">.socket</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Это загрузит текущий файл юнита в редактор, где его можно будет изменить. При выходе из редактора, измененный файл будет записан в <strong>/etc/systemd/system</strong>, он будет иметь приоритет над системным определением юнита (который обычно находится где-то в <strong>/lib/systemd/system</strong>). </p> <p style="text-align: justify;"> Для изменения файла откроется редактор <strong>joe</strong> или <strong>vim</strong> (в зависимости того, который выбран по умолчанию для вашего дистрибутива). Поэтому рекомендуется ознакомиться с&nbsp;<a href="https://zalinux.ru/?p=4640" rel="noopener noreferrer" target="_blank">Основами использования Joe’s Own Editor</a>. </p> <p style="text-align: justify;"> Чтобы удалить все сделанные вами дополнения, удалите каталог конфигурации <strong>.d</strong> или измененный служебный файл из <strong>/etc/systemd/system</strong>. Например, чтобы удалить сниппет, мы можем ввести: </p> <div><div id="highlighter_208631" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">sudo</code> <code class="bash functions">rm</code> <code class="bash plain">-r </code><code class="bash plain">/etc/systemd/system/ssh</code><code class="bash plain">.socket.d</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Для удаления полного модифицированного файла юнита, можно было бы напечатать: </p> <div><div id="highlighter_469198" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">sudo</code> <code class="bash functions">rm</code> <code class="bash plain">/etc/systemd/system/ssh</code><code class="bash plain">.service</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> После удаления файла или каталога вы должны перезагрузить процесс systemd, чтобы он больше не пытался ссылаться на эти файлы и возвращался обратно к использованию системных копий. Вы можете сделать это, набрав: </p> <div><div id="highlighter_421286" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">sudo</code> <code class="bash plain">systemctl daemon-reload</code></div></div></td></tr></tbody></table></div></div> <h2 style="text-align: justify;"> <a id="5" name="5"></a>Настройка состояния системы (уровень запуска) с помощью целей<br> </h2> <p style="text-align: justify;"> <strong>Целями (targets) </strong>являются специальные файлы юнитов, которые описывают состояние системы или точку синхронизации. Как и другие юниты, файлы, которые определяют цели, могут быть идентифицированы по их суффиксу, которым&nbsp;в этом случае является <strong>.target</strong>. Цели сами по себе много не делают, но вместо этого используются для группировки других единиц. </p> <p style="text-align: justify;"> Это можно использовать, чтобы привести систему в определенные состояния, так же как и другие системы инициализации используют уровни запуска. Они используются в качестве справочного материала, когда доступны определенные функции, позволяя вам указать желаемое состояние вместо отдельных юнитов, необходимых для создания этого состояния. </p> <p style="text-align: justify;"> Например, есть <strong>swap.target</strong>, который используется для указания того, что swap готов к использованию. Юниты, которые являются частью этого процесса, могут синхронизироваться с этой целью, указывая в своей конфигурации, что они <strong>WantedBy=</strong> или <strong>RequiredBy=</strong>&nbsp;цель <strong>swap.target</strong>. Юниты, для которых требуется файл подкачки, могут указывать это условие, используя спецификации <strong>Wants=</strong>, <strong>Requires=</strong> и <strong>After=</strong>, чтобы указать характер их отношений. </p> <h3 style="text-align: justify;"> <a id="51" name="51"></a>Получение и установка дефолтной&nbsp;цели<br> </h3> <p style="text-align: justify;"> Процесс systemd имеет цель по умолчанию, которую он использует при загрузке системы. Удовлетворение каскада зависимостей от этой единственной цели приведет систему в желаемое состояние. Чтобы найти цель по умолчанию для вашей системы, введите: </p> <div><div id="highlighter_220459" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl get-default</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Пример вывода </p> <div><div id="highlighter_492699" class="syntaxhighlighter plain"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain plain">multi-user.target</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Если вы хотите установить другую цель по умолчанию, вы можете использовать <strong>set-default</strong>. Например, если у вас установлен графический рабочий стол, и вы хотите, чтобы система загрузилась по умолчанию в графическое окружение, вы можете соответствующим образом изменить цель по умолчанию: </p> <div><div id="highlighter_496237" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">sudo</code> <code class="bash plain">systemctl </code><code class="bash functions">set</code><code class="bash plain">-default graphical.target</code></div></div></td></tr></tbody></table></div></div> <h3 style="text-align: justify;"> <a id="52" name="52"></a>Список доступных целей<br> </h3> <p style="text-align: justify;"> Вы можете получить список доступных целей в своей системе, введя: </p> <div><div id="highlighter_100737" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl list-unit-files --</code><code class="bash functions">type</code><code class="bash plain">=target</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> В отличие от уровней запуска, несколько целей могут быть активны за один раз. Активная цель указывает, что systemd попытался запустить все юниты, привязанные к цели, и не попытался снова их отключить (teardown). Чтобы увидеть все активные цели, введите: </p> <div><div id="highlighter_173746" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl list-</code><code class="bash functions">units</code> <code class="bash plain">--</code><code class="bash functions">type</code><code class="bash plain">=target</code></div></div></td></tr></tbody></table></div></div> <h3 style="text-align: justify;"> <a id="53" name="53"></a>Изоляция целей<br> </h3> <p style="text-align: justify;"> Можно запустить все юниты, связанные с целью, и остановить все юниты, которые не являются частью дерева зависимостей. Команда, которая нам нужна для этого, называется <strong>isolate</strong>. Это похоже на изменение уровня запуска в других системах инициализации. </p> <p style="text-align: justify;"> Например, если вы работаете в графической среде с активным <strong>graphical.target</strong>, вы можете отключить графическую систему и перевести систему в состояние многопользовательской командной строки, изолировав <strong>multi-user.target</strong>. Поскольку <strong>graphical.target</strong> зависит от <strong>multi-user.target</strong>, но не наоборот, все графические блоки будут остановлены. </p> <p style="text-align: justify;"> Вы можете взглянуть на зависимости цели, которую&nbsp;вы изолируете, прежде чем выполнять эту процедуру, чтобы убедиться, что вы не останавливаете жизненно важные службы: </p> <div><div id="highlighter_975851" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl list-dependencies multi-user.target</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Если вас устраивают юниты, которые будут сохранены в живых, вы можете изолировать цель, набрав: </p> <div><div id="highlighter_217495" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">sudo</code> <code class="bash plain">systemctl isolate multi-user.target</code></div></div></td></tr></tbody></table></div></div> <h3 style="text-align: justify;"> <a id="54" name="54"></a>Использование ярлыков для важных событий<br> </h3> <p style="text-align: justify;"> Имеются цели, определенные для важных событий, таких как выключение или перезагрузка. Тем не менее, systemctl также имеет несколько ярлыков, которые добавляют немного дополнительной функциональности. </p> <p style="text-align: justify;"> Например, чтобы вывести систему в режим спасения (однопользовательский), вы можете просто использовать команду <strong>rescue </strong>вместо изолирования <strong>rescue.target</strong>: </p> <div><div id="highlighter_941770" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">sudo</code> <code class="bash plain">systemctl rescue</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Это обеспечит дополнительную функциональность оповещения всех зарегистрированных пользователей о событии. </p> <p style="text-align: justify;"> Чтобы остановить систему, вы можете использовать команду <strong>halt</strong>: </p> <div><div id="highlighter_627509" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">sudo</code> <code class="bash plain">systemctl halt</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Чтобы начать полное завершение работы, вы можете использовать команду <strong>poweroff</strong>: </p> <div><div id="highlighter_765690" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">sudo</code> <code class="bash plain">systemctl poweroff</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Перезапуск можно запустить с помощью команды <strong>reboot</strong>: </p> <div><div id="highlighter_99813" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">sudo</code> <code class="bash plain">systemctl reboot</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Все эти оповещения регистрируются пользователями, для которых происходит это событие; а то, что просто запускает или изолирует цель – нет. &nbsp;Обратите внимание, что большинство машин свяжут более короткие, более обычные команды для этих операций, чтобы они работали правильно с systemd. </p> <p style="text-align: justify;"> Например, чтобы перезагрузить систему, вы обычно можете ввести: </p> <div><div id="highlighter_901685" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">sudo</code> <code class="bash plain">reboot</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> <u><a id="systemctl-reboot-and-reboot" name="systemctl-reboot-and-reboot"></a>В чём разница между «systemctl reboot» и «reboot», а также «systemctl poweroff» и «poweroff»</u> </p> <p style="text-align: justify;"> Команды <strong>halt</strong>, <strong>poweroff</strong>, <strong>reboot</strong> реализованы для того, чтобы сохранить базовую совместимость с исходными командами SysV. Глаголы </p> <ul> <li style="text-align: justify;"> <strong>systemctl halt</strong> </li> <li style="text-align: justify;"> <strong>systemctl poweroff</strong> </li> <li style="text-align: justify;"> <strong>systemctl reboot</strong> </li> </ul> <p style="text-align: justify;"> обеспечивают ту же функциональность с некоторыми дополнительными функциями. </p> <p style="text-align: justify;"> То есть <strong>reboot</strong> это теперь тоже <strong>systemctl</strong>. В этом можно убедиться: </p> <div><div id="highlighter_649439" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash functions">which</code> <code class="bash plain">reboot</code></div><div class="line number2 index1 alt1"><code class="bash plain">/usr/sbin/reboot</code></div><div class="line number3 index2 alt2">&nbsp;</div><div class="line number4 index3 alt1"><code class="bash functions">file</code> <code class="bash plain">/usr/sbin/reboot</code></div><div class="line number5 index4 alt2"><code class="bash plain">/usr/sbin/reboot</code><code class="bash plain">: symbolic link to </code><code class="bash plain">/bin/systemctl</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> То есть команда <strong>reboot</strong> на самом деле является символической ссылкой на <strong>systemctl</strong>. </p> <p style="text-align: justify;"> В свою очередь команда </p> <div><div id="highlighter_238803" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl reboot</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> является сокращением для </p> <div><div id="highlighter_991332" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl start reboot.target --job-mode=replace-irreversibly --no-block</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> То есть </p> <div><div id="highlighter_60066" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">reboot</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> это в точности то же самое что и </p> <div><div id="highlighter_41510" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl reboot</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> а также </p> <div><div id="highlighter_511970" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">systemctl start reboot.target --job-mode=replace-irreversibly --no-block</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Сказанное справедливо для дистрибутивов, которые перешли на systemd (например, это Arch Linux, всё семейство Debian, включая Ubuntu). То есть для большинства современных дистрибутивов, кроме тех, на которых остался SysV. </p> <p style="text-align: justify;"> В некоторых случаях команда reboot не срабатывает — подробности смотрите в статье <a href="https://zalinux.ru/?p=5887" rel="noopener" target="_blank">Ошибка «Failed to talk to init daemon»</a>.&nbsp;В этом случае для перезагрузки компьютера необходимо добавить опцию <strong>-f</strong>: </p> <div><div id="highlighter_999303" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">reboot -f</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Команда для выключения следующая: </p> <div><div id="highlighter_535318" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">poweroff -f</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Если даже эти команды не помогли, то используйте варианты с двойной опцией <strong>-f</strong>. </p> <p style="text-align: justify;"> Чтобы выключить компьютер выполните: </p> <div><div id="highlighter_307153" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">poweroff -f -f</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Или перезагрузите компьютер командой: </p> <div><div id="highlighter_803228" class="syntaxhighlighter bash"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2"></div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">reboot -f -f</code></div></div></td></tr></tbody></table></div></div> <p style="text-align: justify;"> Опция <strong>-f</strong> означает принудительную немедленную остановку, выключение или перезагрузку. При указании один раз это приводит к немедленному, но чистому завершению работы системным менеджером. Если указано дважды, это приводит к немедленному завершению работы без обращения к системному менеджеру. </p> <p style="text-align: justify;"> При использовании опции <strong>-f</strong> с <strong>systemctl halt</strong>, <strong>systemctl poweroff</strong>, <strong>systemctl reboot</strong> или <strong>systemctl kexec</strong> выполняется выбранная операция, без выключения всех юнитов. Однако все процессы будут принудительно завершены, и все файловые системы будут отключены или перемонтированы только для чтения. Следовательно, это радикальный, но относительно безопасный вариант запроса немедленной перезагрузки. Если для этих операций дважды указать <strong>--force</strong> (за исключением <strong>kexec</strong>), они будут выполнены немедленно, без завершения каких-либо процессов или размонтирования каких-либо файловых систем. Предупреждение: указание <strong>--force</strong> дважды для любой из этих операций может привести к потере данных. Обратите внимание, что если дважды указать --force, выбранная операция выполняется самим <strong>systemctl</strong>, и с системным менеджером не связываются. Это означает, что команда должна выполняться даже в случае сбоя системного менеджера. </p> <h2 style="text-align: justify;"> <a id="6" name="6"></a>Заключение<br> </h2> <p style="text-align: justify;"> К настоящему времени вы должны быть знакомы с некоторыми основными возможностями команды <strong>systemctl</strong>, которые позволяют вам взаимодействовать с вашим экземпляром <strong>systemd </strong>и управлять им. Утилита <strong>systemctl </strong>будет вашей основной точкой взаимодействия со слулжбами и управлением состоянием системы. </p> <p style="text-align: justify;"> Хотя <strong>systemctl </strong>работает в основном с процессом ядра <strong>systemd</strong>, в системе <strong>systemd </strong>есть другие компоненты, которые контролируются другими утилитами. Другие возможности, такие как управление журналом и пользовательские сеансы, обрабатываются отдельными демонами и утилитами управления (<strong>journald</strong>/<strong>journalctl </strong>и <strong>logind</strong>/<strong>loginctl </strong>соответственно). Найдите время, чтобы ознакомиться с этими другими инструментами и демонами, это сделает управление более простой задачей. </p> ⇑ Наверх ⇑

В моей WIKI постоянно ведётся какая-то работа со статьями. Если у вас возникли вопросы или замечания, можете их отправлять на почту support@mihanik.net