Поиск по сайту:

Как управлять службами Systemd с помощью Systemctl в Linux


На этой странице

  1. Предпосылки
  2. Проверьте Systemd
  3. Управление службами с помощью Systemd
  4. Управление файлами модулей Systemd
  5. Управление сокетами с помощью Systemctl
  6. Дополнительные команды Systemctl
  7. Заключение

Systemd — стандартный процесс управления службами запуска в операционных системах Linux. Он используется для управления тем, какие программы запускаются при загрузке системы Linux. Это системный менеджер, ставший новым стандартом для операционных систем Linux. Systemd позволяет вам создать собственный сервис systemd для запуска и управления любым процессом. В этом руководстве мы объясним, как управлять службами с помощью systemd в Linux.

Предпосылки

  • Сервер под управлением Linux с Systemd, здесь я буду использовать сервер Ubuntu 20.04.
  • Пароль root настраивается на сервере.

Проверить Systemd

По умолчанию Systemd предустановлен во всех основных операционных системах. Вы можете проверить установленную версию Systemd с помощью следующей команды:

systemctl --version

Вы должны увидеть следующий вывод:

systemd 245 (245.4-4ubuntu3)
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid

Вы можете найти расположение Systemd с помощью следующей команды:

whereis systemd

Вы должны получить следующий результат:

systemd: /usr/bin/systemd /usr/lib/systemd /etc/systemd /usr/share/systemd /usr/share/man/man1/systemd.1.gz

Чтобы найти местоположение systemctl, выполните следующую команду:

whereis systemctl

Вы должны получить следующий результат:

systemctl: /usr/bin/systemctl /usr/share/man/man1/systemctl.1.gz

Вы также можете проверить, запущен ли Systemd, с помощью следующей команды:

ps -eaf | grep systemd

Вы должны получить следующий результат:

root         269       1  0 09:57 ?        00:00:01 /lib/systemd/systemd-journald
root         294       1  0 09:57 ?        00:00:00 /lib/systemd/systemd-udevd
systemd+     297       1  0 09:57 ?        00:00:00 /lib/systemd/systemd-networkd
message+     319       1  0 09:57 ?        00:00:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
root         329       1  0 09:57 ?        00:00:00 /lib/systemd/systemd-logind
systemd+     382       1  0 09:57 ?        00:00:00 /lib/systemd/systemd-resolved
root        1128       1  0 10:47 ?        00:00:00 /lib/systemd/systemd --user
root        1177    1152  0 10:48 pts/0    00:00:00 grep --color=auto systemd

Вы также можете проанализировать время, затрачиваемое каждым процессом при загрузке системы, с помощью следующей команды:

systemd-analyze blame

Вы должны получить следующий результат:

3.662s csm.service                         
1.899s apt-daily-upgrade.service           
1.798s dev-sda1.device                     
1.400s systemd-logind.service              
1.336s fstrim.service                      
1.207s systemd-networkd.service            
1.131s systemd-resolved.service            
 856ms man-db.service                      
 842ms systemd-journald.service            
 415ms e2scrub_reap.service                
 320ms keyboard-setup.service              
 295ms networkd-dispatcher.service         
 239ms systemd-udev-trigger.service 

Чтобы проанализировать критическую цепочку при загрузке, выполните следующую команду:

systemd-analyze critical-chain

Вы должны получить следующий результат:

The time when unit became active or started is printed after the "@" character.
The time the unit took to start is printed after the "+" character.

graphical.target @4.948s
??multi-user.target @4.946s
  ??csm.service @1.282s +3.662s
    ??basic.target @1.277s
      ??sockets.target @1.276s
        ??dbus.socket @1.274s
          ??sysinit.target @1.257s
            ??systemd-update-utmp.service @1.247s +8ms
              ??systemd-tmpfiles-setup.service @1.228s +17ms
                ??systemd-journal-flush.service @1.201s +24ms
                  ??systemd-journald.service @356ms +842ms
                    ??systemd-journald.socket @313ms
                      ??system.slice @225ms
                        ??-.slice @225ms

Управление службами с помощью Systemd

Systemctl предоставляет более простой способ управления службами systemd.

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

systemctl start apache2

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

systemctl restart apache2

Чтобы остановить службу Apache, выполните следующую команду:

systemctl stop apache2

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

systemctl reload apache2

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

systemctl enable apache2

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

systemctl disable apache2

Чтобы убить службу Apache, выполните следующую команду:

systemctl kill apache2

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

systemctl mask apache2

Чтобы разоблачить процесс Apache, выполните следующую команду:

systemctl unmask apache2

Чтобы проверить, включена ли служба Apache, выполните следующую команду:

systemctl is-enabled apache2

Чтобы проверить состояние службы Apache, выполните следующую команду:

systemctl status apache2

Если служба запущена, вы должны получить следующий вывод:

? apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2021-01-09 10:53:12 UTC; 26s ago
       Docs: https://httpd.apache.org/docs/2.4/
   Main PID: 1708 (apache2)
      Tasks: 55 (limit: 2353)
     Memory: 5.8M
     CGroup: /system.slice/apache2.service
             ??1708 /usr/sbin/apache2 -k start
             ??1709 /usr/sbin/apache2 -k start
             ??1710 /usr/sbin/apache2 -k start

Jan 09 10:53:12 ubunt4 systemd[1]: Starting The Apache HTTP Server...

После переименования или удаления любого файла systemd вам нужно будет перезагрузить его, чтобы применить изменения. Чтобы перезагрузить файл службы systemd, выполните следующую команду:

systemctl daemon-reload

Управление файлами модулей Systemd

Приведенные выше команды будут полезны для управления отдельными службами. Однако его нельзя использовать для определения текущего состояния системы. Есть много других команд, полезных для предоставления этой информации.

Чтобы просмотреть список всех доступных юнитов, выполните следующую команду:

systemctl list-unit-files

Вы должны увидеть список всех юнит-файлов в следующем выводе:

UNIT FILE                              STATE           VENDOR PRESET
proc-sys-fs-binfmt_misc.automount      static          enabled      
-.mount                                generated       enabled      
dev-hugepages.mount                    static          enabled      
dev-mqueue.mount                       static          enabled      
proc-sys-fs-binfmt_misc.mount          disabled        enabled      
sys-fs-fuse-connections.mount          static          enabled      
sys-kernel-config.mount                static          enabled      
sys-kernel-debug.mount                 static          enabled      
sys-kernel-tracing.mount               static          enabled      
acpid.path                             enabled         enabled      
ntp-systemd-netif.path                 enabled         enabled      
systemd-ask-password-console.path      static          enabled      
systemd-ask-password-wall.path         static          enabled      
session-2.scope                        transient       enabled      
acpid.service                          disabled        enabled      
apt-daily-upgrade.service              static          enabled      
apt-daily.service                      static          enabled      
                        enabled         enabled      
console-getty.service                  disabled        disabled     
console-setup.service                  enabled         enabled      
               static          enabled      
cron.service                           enabled         enabled      
cryptdisks-early.service               masked          enabled      
cryptdisks.service                     masked          enabled      
csm.service                            enabled         enabled      
dbus-org.freedesktop.hostname1.service static          enabled      
dbus-org.freedesktop.locale1.service   static          enabled      

Чтобы просмотреть список всех активных юнитов, выполните следующую команду:

systemctl list-units

Вы должны увидеть следующий вывод:

  UNIT                                                                                        LOAD   ACTIVE SUB       DESCRIPTION             >
  proc-sys-fs-binfmt_misc.automount                                                           loaded active waiting   Arbitrary Executable Fil>
  sys-devices-pci0000:00-0000:00:03.0-virtio0-net-eth0.device                                 loaded active plugged   Virtio network device   >
  sys-devices-pci0000:00-0000:00:04.0-virtio1-net-eth1.device                                 loaded active plugged   Virtio network device   >
  sys-devices-pci0000:00-0000:00:05.0-virtio2-host2-target2:0:0-2:0:0:0-block-sda-sda1.device loaded active plugged   QEMU_HARDDISK 1         >
  sys-devices-pci0000:00-0000:00:05.0-virtio2-host2-target2:0:0-2:0:0:0-block-sda.device      loaded active plugged   QEMU_HARDDISK           >
  sys-devices-platform-serial8250-tty-ttyS1.device                                            loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS10.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS11.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS12.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS13.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS14.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS15.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS16.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS17.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS18.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS19.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS2.device                                            loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS20.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS21.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS22.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS23.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS24.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS25.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS26.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS27.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS28.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS29.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS3.device                                            loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS30.device                                           loaded active plugged   /sys/devices/platform/se>
  sys-devices-platform-serial8250-tty-ttyS31.device                                           loaded active plugged   /sys/devices/platform/se>

Чтобы просмотреть список всех отказавших устройств, выполните следующую команду:

systemctl --failed

Чтобы вывести список всех служб, включая включенные и отключенные службы, выполните следующую команду:

systemctl list-unit-files --type=service

Вы должны увидеть следующий вывод:

UNIT FILE                              STATE           VENDOR PRESET
acpid.service                          disabled        enabled      
apache-htcacheclean.service            disabled        enabled      
           disabled        enabled      
apache2.service                        enabled         enabled      
                       disabled        enabled      
apt-daily-upgrade.service              static          enabled      
apt-daily.service                      static          enabled      
                        enabled         enabled      
console-getty.service                  disabled        disabled     
console-setup.service                  enabled         enabled      
               static          enabled      
cron.service                           enabled         enabled      
cryptdisks-early.service               masked          enabled      
cryptdisks.service                     masked          enabled      
csm.service                            enabled         enabled      
dbus-org.freedesktop.hostname1.service static          enabled      
dbus-org.freedesktop.locale1.service   static          enabled      
dbus-org.freedesktop.login1.service    static          enabled      
dbus-org.freedesktop.resolve1.service  enabled         enabled      
dbus-org.freedesktop.timedate1.service static          enabled      
dbus-org.freedesktop.timesync1.service masked          enabled      
dbus.service                           static          enabled      
debug-shell.service                    disabled        disabled     
dmesg.service                          enabled         enabled      
                       static          enabled      
e2scrub_all.service                    static          enabled      
                  static          enabled      
e2scrub_reap.service                   enabled         enabled      
emergency.service                      static          enabled      
fstrim.service                         static          enabled      
getty-static.service                   static          enabled      
                         enabled         enabled      

Вы можете увидеть свойства модуля SSH, выполнив следующую команду:

systemctl show sshd.service

Вы должны увидеть следующий вывод:

Id=sshd.service
Names=sshd.service
Requires=basic.target
Wants=system.slice
WantedBy=multi-user.target
Conflicts=shutdown.target
Before=shutdown.target multi-user.target
After=syslog.target network.target auditd.service systemd-journald.socket basic.target system.slice
Description=OpenSSH server daemon

Управление сокетами с помощью Systemctl

Вы также можете управлять сокетами с помощью команды Systemctl.

Чтобы получить список всех доступных системных сокетов, выполните следующую команду:

systemctl list-unit-files --type=socket

Вы должны увидеть следующий вывод:

UNIT FILE                        STATE    VENDOR PRESET
acpid.socket                     enabled  enabled      
dbus.socket                      static   enabled      
ssh.socket                       disabled enabled      
syslog.socket                    static   disabled     
systemd-fsckd.socket             static   enabled      
systemd-initctl.socket           static   enabled      
systemd-journald-audit.socket    static   enabled      
systemd-journald-dev-log.socket  static   enabled      
 static   enabled      
systemd-journald.socket          static   enabled      
         static   enabled      
systemd-networkd.socket          disabled enabled      
systemd-rfkill.socket            static   enabled      
systemd-udevd-control.socket     static   enabled      
systemd-udevd-kernel.socket      static   enabled      

Чтобы запустить сокет SSH, выполните следующую команду:

systemctl start ssh.socket

Чтобы остановить сокет SSH, выполните следующую команду:

systemctl stop ssh.socket

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

systemctl restart ssh.socket

Чтобы проверить состояние сокета SSH, выполните следующую команду:

systemctl status ssh.socket

Чтобы включить или отключить сокет SSH во время загрузки, выполните следующую команду:

systemctl enable ssh.socket
systemctl disable ssh.socket

Дополнительные команды Systemctl

Вы можете выполнить несколько задач с помощью команды systemctl. Если вы хотите перевести систему в однопользовательский режим, выполните следующую команду:

systemctl rescue

Чтобы остановить систему, выполните следующую команду:

systemctl halt

Чтобы выключить систему, выполните следующую команду:

systemctl poweroff

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

systemctl reboot

Заключение

В приведенном выше руководстве вы узнали, как управлять и контролировать службу systemd в Linux. Я надеюсь, что это поможет вам взаимодействовать с экземпляром systemd и управлять им. Не стесняйтесь спрашивать меня, если у вас есть какие-либо вопросы.