15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати
31.10.2024

Systemctl Commands: Як перезавантажити, перезавантажити та зупинити сервіси в Linux

Ефективне управління сервісами є однією з найважливіших навичок для будь-якого адміністратора системи Linux. Незалежно від того, чи ви запускаєте високонавантажений веб-сервер на плані VPS Hosting або обслуговуєте середовище Dedicated Server, розуміння того, як керувати системними сервісами за допомогою systemctl, є абсолютно необхідним. Цей комплексний посібник охоплює все, що вам потрібно знати про перезавантаження, перезавантаження конфігурації та зупинення сервісів у Linux за допомогою systemd та systemctl.

Що таке systemd і чому це важливо?

systemd — це система ініціалізації та менеджер сервісів за замовчуванням, який використовується практично у всіх сучасних дистрибутивах Linux, включаючи Ubuntu, Debian, CentOS, Rocky Linux, AlmaLinux та Fedora. Він замінив старіші системи ініціалізації, такі як SysVinit та Upstart, принісши значні поліпшення у те, як Linux завантажується та керує процесами.

Ключові особливості systemd

  • Паралельне запускання сервісів — Значно скорочує час завантаження, запускаючи сервіси одночасно
  • Активація сервісів за запитом — Сервіси можуть запускатися лише за необхідності, економлячи ресурси системи
  • Управління залежностями — Автоматично обробляє залежності та впорядкування сервісів
  • Централізоване логування — Інтегрується з journald для уніфікованого структурованого управління журналами
  • Контроль ресурсів на основі Cgroup — Відстежує та обмежує використання CPU, пам’яті та I/O для кожного сервісу
  • Активація Socket та D-Bus — Забезпечує розширені моделі міжпроцесної комунікації

Розуміння systemd — це не просто теорія — це безпосередньо впливає на стабільність, продуктивність та безпеку вашого середовища Linux.

Що таке systemctl?

systemctl — це основний інтерфейс командного рядка для взаємодії з systemd. Він дозволяє адміністраторам:

  • Запускати, зупиняти, перезавантажувати та перезавантажувати конфігурацію сервісів
  • Включати або вимикати сервіси при завантаженні
  • Перевіряти стан сервісу та переглядати журнали
  • Керувати цільовими системами (рівні запуску)
  • Перезавантажувати конфігурацію демона systemd

Усі команди systemctl, які змінюють стан системи, вимагають привілеїв root або доступу sudo.

Основні команди systemctl для управління сервісами

1. Перезавантаження сервісу

Перезавантаження сервісу повністю його зупиняє, а потім запускає заново. Це основна операція, коли:

  • Ви внесли зміни в конфігурацію, які вимагають повного перезапуску процесу
  • Сервіс зламався або став неактивним
  • Вам потрібно застосувати оновлені двійкові файли після оновлення пакету

Синтаксис:

sudo systemctl restart <service_name>

Приклад — Перезавантажити веб-сервер Nginx:

sudo systemctl restart nginx

Приклад — Перезавантажити веб-сервер Apache:

sudo systemctl restart apache2

Приклад — Перезавантажити базу даних MySQL/MariaDB:

sudo systemctl restart mysql

> Важливо: Перезавантаження сервісу викликає коротку перерву. Для виробничих середовищ розгляньте можливість використання reload, якщо це підтримується, щоб уникнути простоїв.

2. Перезавантаження конфігурації сервісу

Перезавантаження конфігурації наказує запущеному сервісу перечитати його файли конфігурації без зупинення процесу. Це ідеально для застосування змін конфігурації без простоїв.

Синтаксис:

sudo systemctl reload <service_name>

Приклад — Перезавантажити конфігурацію Nginx після редагування:

sudo systemctl reload nginx

Приклад — Перезавантажити демон SSH після зміни sshd_config:

sudo systemctl reload sshd

> Примітка: Не всі сервіси підтримують операцію reload. Якщо сервіс не реалізує це, systemctl повернеться з помилкою. У цих випадках замість цього використовуйте restart.

Професійна порада — Використовуйте reload-or-restart для максимальної сумісності:

sudo systemctl reload-or-restart <service_name>

Ця команда спочатку намагається перезавантажити конфігурацію. Якщо сервіс не підтримує перезавантаження конфігурації, він автоматично повертається до повного перезавантаження — що робить це найбезпечнішим варіантом для автоматизованих розгортань.

3. Зупинення сервісу

Зупинення сервісу негайно його завершує. Використовуйте це, коли вам потрібно взяти сервіс у режим офлайн для обслуговування, усунення несправностей або переконфігурації.

Синтаксис:

sudo systemctl stop <service_name>

Приклад — Зупинити веб-сервер Nginx:

sudo systemctl stop nginx

Приклад — Зупинити сервіс брандмауера:

sudo systemctl stop ufw

> Попередження: Зупинення критичного сервісу (наприклад, sshd на віддаленому сервері) може заблокувати вам доступ до вашої системи. Завжди переконайтеся, що у вас є альтернативний метод доступу, наприклад консоль або управління поза смугою, перш ніж зупиняти важливі сервіси.

4. Запуск сервісу

Якщо сервіс наразі не запущений, використовуйте команду start для його запуску.

Синтаксис:

sudo systemctl start <service_name>

Приклад:

sudo systemctl start nginx

5. Включення сервісу при завантаженні

Включення сервісу створює необхідні символічні посилання, щоб systemd автоматично запускав його під час завантаження системи.

Синтаксис:

sudo systemctl enable <service_name>

Приклад:

sudo systemctl enable nginx

Включити та запустити одночасно (рекомендується):

sudo systemctl enable --now nginx

6. Вимикання сервісу при завантаженні

Вимикання сервісу запобігає його автоматичному запуску, але не зупиняє його, якщо він наразі запущений.

Синтаксис:

sudo systemctl disable <service_name>

Приклад:

sudo systemctl disable bluetooth

Вимкнути та зупинити одночасно:

sudo systemctl disable --now bluetooth

7. Перевірка стану сервісу

Команда status — одна з найчастіше використовуваних команд systemctl. Вона надає миттєвий снімок стану сервісу, включаючи останні записи журналу.

Синтаксис:

sudo systemctl status <service_name>

Приклад — Перевірити стан Nginx:

sudo systemctl status nginx

Приклад виведення:

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2024-01-15 10:23:45 UTC; 2h 34min ago
       Docs: man:nginx(8)
    Process: 1234 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 1235 (nginx)
      Tasks: 3 (limit: 4915)
     Memory: 6.2M
        CPU: 45ms
     CGroup: /system.slice/nginx.service
             ├─1235 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             └─1236 "nginx: worker process"

Виведення включає:

  • Loaded — Чи завантажений файл модуля та чи він включений при завантаженні
  • Active — Поточний стан запуску (active (running), inactive (dead), failed тощо)
  • Main PID — Основний ідентифікатор процесу сервісу
  • Memory/CPU — Метрики споживання ресурсів
  • CGroup — Ієрархія групи контролю
  • Recent logs — Останні записи журналу для швидкої діагностики

Розширені команди systemctl

Перевірка, чи активний або включений сервіс

Для використання в скриптах та автоматизації ці команди повертають прості коди виходу у стилі булевих значень:

# Check if a service is currently running
systemctl is-active nginx

# Check if a service is enabled at boot
systemctl is-enabled nginx

# Check if a service has failed
systemctl is-failed nginx

Список усіх сервісів

# List all loaded and active units
systemctl list-units --type=service

# List all installed unit files and their states
systemctl list-unit-files --type=service

# List only failed services
systemctl --failed

Перезавантаження демона systemd

Після створення або зміни файлів модулів ви повинні перезавантажити демон systemd, щоб розпізнати зміни:

sudo systemctl daemon-reload

Маскування та розмаскування сервісу

Маскування сервісу запобігає його запуску вручну або автоматично — навіть іншими сервісами:

# Prevent a service from ever starting
sudo systemctl mask <service_name>

# Re-enable a masked service
sudo systemctl unmask <service_name>

Швидкий довідник: Шпаргалка команд systemctl

КомандаОпис
systemctl start <service>Запустити зупинений сервіс
systemctl stop <service>Зупинити запущений сервіс
systemctl restart <service>Зупинити та перезавантажити сервіс
systemctl reload <service>Перезавантажити конфігурацію без зупинення
systemctl reload-or-restart <service>Перезавантажити конфігурацію, якщо підтримується, інакше перезавантажити
systemctl enable <service>Включити сервіс при завантаженні
systemctl disable <service>Вимкнути сервіс при завантаженні
systemctl enable --now <service>Включити та запустити негайно
systemctl disable --now <service>Вимкнути та зупинити негайно
systemctl status <service>Показати стан сервісу та журнали
systemctl is-active <service>Перевірити, чи запущений сервіс
systemctl is-enabled <service>Перевірити, чи сервіс запускається при завантаженні
systemctl is-failed <service>Перевірити, чи сервіс не вдалося запустити
systemctl list-units --type=serviceСписок усіх активних сервісів
systemctl --failedСписок усіх сервісів, які не вдалося запустити
systemctl daemon-reloadПерезавантажити файли модулів systemd
systemctl mask <service>Повністю запобігти запуску сервісу
systemctl unmask <service>
15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати