Управление службами Systemd. Часть 3 из 3

07.01.2020

Теги: CLILinuxSystemdКомандаСерверФайл

Использование целей

Одна из функций системы инициализации — перевод сервера в различные состояния. Обычно они называются уровнями запуска или уровнями выполнения. В заданный момент времени система может находиться только на одном уровне выполнения.

  • Цель poweroff.target, уровень запуска 0
  • Цель rescue.target, уровень запуска 1
  • Цель multi-user.target, уровень запуска 2
  • Цель multi-user.target, уровень запуска 3
  • Цель multi-user.target, уровень запуска 4
  • Цель graphical.target, уровень запуска 5
  • Цель reboot.target, уровень запуска 6

В Systemd вместо этого применяются цели. Цель — это точка синхронизации, которой можно воспользоваться для перехода в определенное состояние. К цели можно привязать службы и другие юниты, одновременно может быть активно несколько целей. Для просмотра полного списка целей в системе нужно выполнить команду:

$ systemctl list-units --type=target
UNIT                   LOAD    ACTIVE  SUB     DESCRIPTION
----------------------------------------------------------------------------
basic.target           loaded  active  active  Basic System                 
cryptsetup.target      loaded  active  active  Local Encrypted Volumes      
getty.target           loaded  active  active  Login Prompts                
graphical.target       loaded  active  active  Graphical Interface          
local-fs-pre.target    loaded  active  active  Local File Systems (Pre)     
local-fs.target        loaded  active  active  Local File Systems           
multi-user.target      loaded  active  active  Multi-User System            
network-online.target  loaded  active  active  Network is Online            
network.target         loaded  active  active  Network                      
nss-lookup.target      loaded  active  active  Host and Network Name Lookups
nss-user-lookup.target loaded  active  active  User and Group Name Lookups  
paths.target           loaded  active  active  Paths                        
remote-fs.target       loaded  active  active  Remote File Systems          
slices.target          loaded  active  active  Slices                       
sockets.target         loaded  active  active  Sockets                      
sound.target           loaded  active  active  Sound Card                   
swap.target            loaded  active  active  Swap                         
sysinit.target         loaded  active  active  System Initialization        
time-sync.target       loaded  active  active  System Time Synchronized     
timers.target          loaded  active  active  Timers                       

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

20 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

Для просмотра цели по умолчанию, которой Systemd стремится достичь при загрузке (которая, в свою очередь, запускает все файлы юнитов, составляющие дерево зависимости этой цели), выполняем команду:

$ systemctl get-default
graphical.target

Текущая цель системы при загрузке — graphical.target. При помощи команды set-default можно изменить цель по умолчанию:

$ sudo systemctl set-default multi-user.target
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target → /lib/systemd/system/multi-user.target.

Теперь при загрузке система попытается достичь новой цели — multi-user.target, вместо прежней — graphical.target.

Если мы работаем в графической среде с активным graphical.target, можно отключить графическую систему и перевести систему в состояние многопользовательской командной строки, изолировав multi-user.target. Поскольку graphical.target зависит от multi-user.target, но не наоборот, все графические блоки будут остановлены.

$ sudo systemctl isolate multi-user.target

Чтобы вернуться к graphical.target, нужно выполнить команду

$ sudo systemctl isolate graphical.target

Данная команда только изменит текущую цель и не повлияет на следующую загрузку системы.

Остановка и перезапуск сервера

Система инициализации поддерживает сокращённые команды. Например, чтобы отключить сервер:

$ sudo systemctl poweroff

Чтобы перезапустить сервер:

$ sudo systemctl reboot

Запустить сервер в режиме восстановления:

$ sudo systemctl rescue

Просмотр логов

Компонент Systemd под названием journald собирает и управляет общесистемными записями в журнале — то есть данными логов приложений и ядра. Чтобы просмотреть все записи, начиная с самой старой записи:

$ journalctl

По умолчанию эта команда выведет записи текущей и предыдущих загрузок (если инструмент journald настроен для сохранения записей от предыдущих загрузок). Некоторые дистрибутивы включают это поведение по умолчанию, а некоторые — нет. Чтобы включить сохранение записей от предыдущих загрузок:

  1. Установить значение persistent для параметра Storage в файле конфигурации /etc/systemd/journald.conf
  2. Создать постоянный каталог /var/log/journal

Чтобы просмотреть только записи текущей загрузки:

$ journalctl -b

Посмотреть список последних загрузок системы:

$ journalctl --list-boots

Записи журнала определенной загрузки (boot-id — см. предыдущую команду):

$ journalctl -b <boot-id>

Записи ядра можно просмотреть при помощи команды:

$ journalctl -k

Если совместить флаги -k и -b, можно получить записи ядра только для текущей загрузки.

$ journalctl -k -b

Чтобы просмотреть все записи в журнале, сделанные определённым юнитом:

$ journalctl -u nginx.service

Ограничить вывод текущей загрузкой можно с помощью флага -b:

$ journalctl -b -u nginx.service

Запуск скриптов при загрузке

Раньше для этих целей использовался файл /etc/rc.local, теперь так делать не рекомендуется. Тем не менее, если такой файл существует и является исполняемым, он будет выполнен специальным юнитом rc-local:

$ systemctl status rc-local.service
● rc-local.service - /etc/rc.local Compatibility
   Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset: enabled)
  Drop-In: /lib/systemd/system/rc-local.service.d
           └─debian.conf
   Active: inactive (dead)
     Docs: man:systemd-rc-local-generator(8)
$ systemctl cat rc-local.service
# /lib/systemd/system/rc-local.service
#  SPDX-License-Identifier: LGPL-2.1+
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.local is executable.
[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no
# /lib/systemd/system/rc-local.service.d/debian.conf
[Unit]
# not specified by LSB, but has been behaving that way in Debian under SysV
# init and upstart
After=network-online.target

# Often contains status messages which users expect to see on the console
# during boot
[Service]
StandardOutput=journal+console
StandardError=journal+console

Поиск: CLI • Linux • Systemd • Команда • Сервер • Файл

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.