15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало
31.10.2024

Systemctl команди: Как да рестартирате, презаредите и спрете услуги в 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. Той позволява на администраторите да:

  • Стартират, спират, рестартират и презареждат услуги
  • Активират или деактивират услуги при стартиране
  • Проверяват статуса на услугите и преглеждат логове
  • Управляват системни цели (runlevels)
  • Презареждат конфигурацията на 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

Пример — Спиране на услугата firewall:

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 — Основният ID на процеса на услугата
  • Memory/CPU — Метрики на потреблението на ресурси
  • CGroup — Йерархията на контролната група
  • Последни логове — Последните няколко записа в журнала за бързо диагностициране

Разширени 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>Премахване на маска от услуга

Практични случаи на употреба за администраторите на сървъри

Сценарий 1: Прилагане на промени в конфигурацията на Nginx

Редактирали сте /etc/nginx/nginx.conf на вашия уеб сървър. За прилагане на промени без прекъсване на активни връзки:

# First, test the configuration syntax
sudo nginx -t

# If the test passes, reload gracefully
sudo systemctl reload nginx

Сценарий

15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало