15%

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

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

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

Skills
Почати
24.10.2024

Перезапуск служб із командного рядка в Linux: повний посібник адміністратора

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

Цей вичерпний посібник проведе вас через усі основні методи перезапуску служб Linux — охоплюючи systemd, SysVinit та Upstart — разом із практичними прикладами, методами перевірки статусу, порадами щодо аналізу журналів та найкращими практиками, на які досвідчені адміністратори покладаються щодня.

Розуміння служб Linux та менеджерів служб

У Linux служба (також звана демоном) — це фоновий процес, що виконує певну, постійну функцію. Поширені приклади включають:

  • Apache / Nginx — демони веб-сервера
  • MySQL / PostgreSQL — демони сервера баз даних
  • SSH (sshd) — демон захищеного доступу до оболонки
  • Cron — демон запланованих завдань
  • Postfix / Dovecot — демони поштового сервера

Цими службами керує система ініціалізації або менеджер служб, який відповідає за їх запуск, зупинку, перезапуск та моніторинг. Три найпоширеніші менеджери служб, з якими ви зустрінетеся в Linux:

Менеджер службВикористовується в
systemdUbuntu 15.04+, Debian 8+, CentOS 7+, RHEL 7+, Fedora, AlmaLinux, Rocky Linux
SysVinitСтаріші версії Debian, старіші версії Ubuntu (до 15.04), застарілі RHEL/CentOS 6
UpstartUbuntu 9.10 до 14.10

Переважна більшість сучасних серверів Linux — включаючи ті, що працюють на VPS Хостингу або Виділених серверах — використовують systemd як менеджер служб за замовчуванням. Однак розуміння всіх трьох систем гарантує, що ви будете готові до будь-якого середовища, з яким зіткнетеся.

Метод 1: Перезапуск служб за допомогою systemd (сучасний Linux)

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

Крок 1: Відкрийте термінал

Отримайте доступ до інтерфейсу командного рядка вашого сервера — безпосередньо, через SSH або через панель керування хостингом.

Крок 2: Перезапустіть службу

Базовий синтаксис для перезапуску служби за допомогою systemd:

sudo systemctl restart <service-name>

Поширені реальні приклади:

# Restart the Apache web server
sudo systemctl restart apache2

# Restart Nginx
sudo systemctl restart nginx

# Restart MySQL / MariaDB
sudo systemctl restart mysql

# Restart the SSH daemon
sudo systemctl restart sshd

# Restart the Cron scheduler
sudo systemctl restart cron

# Restart Postfix mail server
sudo systemctl restart postfix

> Примітка: У деяких дистрибутивах назва служби може дещо відрізнятися. Наприклад, Apache може бути apache2 у системах Debian/Ubuntu, але httpd у системах CentOS/RHEL/AlmaLinux.

Крок 3: Перевірте успішність перезапуску служби

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

sudo systemctl status <service-name>

Приклад виведення для справної служби Apache:

sudo systemctl status apache2

● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2025-01-13 10:45:22 UTC; 3s ago
    Process: 12345 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
   Main PID: 12346 (apache2)

Ключові індикатори, на які слід звертати увагу:

  • Active: active (running) — служба працює нормально
  • Active: failed — служба не запустилася; негайно перевірте журнали
  • Loaded: enabled — служба налаштована на автоматичний запуск під час завантаження

Додаткові корисні команди systemd

Окрім простого перезапуску, systemd надає кілька пов’язаних команд, які адміністратори використовують регулярно:

# Stop a service completely
sudo systemctl stop <service-name>

# Start a stopped service
sudo systemctl start <service-name>

# Reload configuration without a full restart (if supported)
sudo systemctl reload <service-name>

# Reload config or restart if reload isn't supported
sudo systemctl reload-or-restart <service-name>

# Enable a service to start automatically at boot
sudo systemctl enable <service-name>

# Disable a service from starting at boot
sudo systemctl disable <service-name>

# Check if a service is currently active
sudo systemctl is-active <service-name>

# Check if a service is enabled at boot
sudo systemctl is-enabled <service-name>

Перегляд журналів служби в реальному часі за допомогою journalctl

systemd інтегрується з системою журналювання journal. Для перегляду журналів конкретної служби:

# View all logs for a service
sudo journalctl -u apache2

# Follow logs in real time (like tail -f)
sudo journalctl -u apache2 -f

# View only the most recent 50 lines
sudo journalctl -u apache2 -n 50

# View logs since the last boot
sudo journalctl -u apache2 -b

Це незамінно, коли служба не вдається перезапустити і вам потрібно швидко діагностувати першопричину.

Метод 2: Перезапуск служб за допомогою SysVinit (застарілий Linux)

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

Крок 1: Відкрийте термінал

Підключіться до вашого сервера через SSH або прямий доступ до консолі.

Крок 2: Перезапустіть службу

sudo service <service-name> restart

Поширені приклади:

# Restart MySQL
sudo service mysql restart

# Restart Apache
sudo service apache2 restart

# Restart Nginx
sudo service nginx restart

# Restart the SSH daemon
sudo service ssh restart

# Restart Postfix
sudo service postfix restart

Крок 3: Перевірте статус служби

sudo service <service-name> status

Приклад:

sudo service mysql status

● mysql.service - MySQL Community Server
   Active: active (running) since Mon 2025-01-13 10:47:00 UTC; 5s ago

Інші команди служби SysVinit

# Stop a service
sudo service <service-name> stop

# Start a service
sudo service <service-name> start

# Reload configuration
sudo service <service-name> reload

Ви також можете взаємодіяти зі службами SysVinit безпосередньо, використовуючи скрипти ініціалізації, розташовані в /etc/init.d/:

sudo /etc/init.d/apache2 restart
sudo /etc/init.d/mysql status

> Примітка щодо сумісності: У сучасних дистрибутивах на основі systemd команда service все ще працює як обгортка для сумісності — вона автоматично перетворює команди service на виклики systemctl у фоновому режимі. Це означає, що ви можете безпечно використовувати команди service на сучасних системах, хоча systemctl є кращим варіантом завдяки додатковим функціям.

Метод 3: Перезапуск служб за допомогою Upstart (застарілий Ubuntu)

Upstart була системою ініціалізації Ubuntu з версії 9.10 до 14.10, перш ніж systemd замінив її в Ubuntu 15.04. Якщо ви обслуговуєте дуже старий сервер Ubuntu, ви будете використовувати команду initctl.

Крок 1: Відкрийте термінал

Крок 2: Перезапустіть службу

sudo initctl restart <service-name>

Приклади:

# Restart lighttpd
sudo initctl restart lighttpd

# Restart MySQL
sudo initctl restart mysql

Крок 3: Перевірте статус служби

sudo initctl status <service-name>

Приклад:

sudo initctl status lighttpd

lighttpd start/running, process 4521

Інші команди Upstart

# Stop a service
sudo initctl stop <service-name>

# Start a service
sudo initctl start <service-name>

# List all Upstart-managed jobs and their states
sudo initctl list

Як визначити, який менеджер служб використовує ваша система

Якщо ви підключаєтеся до незнайомого сервера і не впевнені, яка система ініціалізації використовується, виконайте ці швидкі діагностичні команди:

# Check if systemd is running as PID 1
ps -p 1 -o comm=

# Or check the init system directly
cat /proc/1/comm

# Check systemd version (if installed)
systemctl --version

# Check if Upstart is present
initctl --version

# Check for SysVinit scripts
ls /etc/init.d/

Якщо ps -p 1 -o comm= повертає systemd, ви працюєте в системі systemd. Якщо повертає init, ви, ймовірно, працюєте в SysVinit або Upstart.

Найкращі практики перезапуску служб Linux

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

1. Завжди перевіряйте конфігурацію перед перезапуском

Багато служб надають вбудовану перевірку синтаксису. Використовуйте її перед перезапуском, щоб уникнути зупинки служби через пошкоджену конфігурацію:

# Test Apache configuration
sudo apachectl configtest
# or
sudo apache2ctl -t

# Test Nginx configuration
sudo nginx -t

# Test SSH daemon configuration
sudo sshd -t

# Test MySQL configuration
sudo mysqld --validate-config

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

2. Використовуйте reload замість restart коли це можливо

Перезавантаження застосовує зміни конфігурації без переривання активних з’єднань, що робить його набагато менш руйнівним, ніж повний перезапуск:

# Gracefully reload Apache (zero downtime)
sudo systemctl reload apache2

# Gracefully reload Nginx
sudo systemctl reload nginx

Використовуйте restart лише тоді, коли повний перезапуск процесу дійсно необхідний (наприклад, після оновлення програмного забезпечення або коли перезавантаження не підтримується).

3. Перевіряйте журнали одразу після невдалого перезапуску

Якщо служба не запускається, негайно перевірте журнали:

# systemd journal (most detailed)
sudo journalctl -u <service-name> -n 100 --no-pager

# Application-specific log files
sudo tail -n 50 /var/log/apache2/error.log
sudo tail -n 50 /var/log/nginx/error.log
sudo tail -n 50 /var/log/mysql/error.log
sudo tail -n 50 /var/log/syslog

4. Будьте обережні при перезапуску SSH на віддалених серверах

Якщо ви підключені до віддаленого сервера через SSH і перезапускаєте демон SSH, ви ризикуєте втратити з’єднання. Зменшіть цей ризик:

# Safer: reload SSH config without dropping connections
sudo systemctl reload sshd

# If you must restart, use a delayed command to give yourself time to reconnect
sudo shutdown -r +1  # schedules a reboot in 1 minute (use only if necessary)

5. Розумійте вплив на запущені процеси

Перезапуск служби бази даних, такої як MySQL або PostgreSQL, завершить усі активні з’єднання з базою даних. Завжди повідомляйте команди розробників або плануйте вікна технічного обслуговування для виробничих систем перед перезапуском критичних служб.

6. Переконайтеся, що служби налаштовані на перезапуск після перезавантаження

Після ручного перезапуску служби переконайтеся, що вона налаштована на автоматичний запуск після перезавантаження системи:

sudo systemctl enable <service-name>

Короткий довідник: Шпаргалка команд управління службами

ДіяsystemdSysVinitUpstart
Перезапускsystemctl restart <svc>service <svc> restartinitctl restart <svc>
Запускsystemctl start <svc>service <svc> startinitctl start <svc>
Зупинкаsystemctl stop <svc>service <svc> stopinitctl stop <svc>
Перезавантаженняsystemctl reload <svc>service <svc> reloadinitctl reload <svc>
Статусsystemctl status <svc>service <svc> statusinitctl status <svc>
Увімкнути при завантаженніsystemctl enable <svc>update-rc.d <svc> enableN/A
Переглянути журналиjournalctl -u <svc>/var/log/syslog/var/log/upstart/<svc>.log

Усунення поширених проблем із перезапуском служб

Служба не запускається після перезапуску

Симптоми: systemctl status показує Active: failed

Кроки для діагностики:

# Get detailed failure reason
sudo systemctl status <service-name>
sudo journalctl -u <service-name> -n 50

# Check for port conflicts
sudo ss -tlnp | grep <port-number>
sudo netstat -tlnp | grep <port-number>

# Check file permissions on config files
ls -la /etc/<service-config-file>

Служба перезапускається, але не застосовує нову конфігурацію

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

Рішення:

# Verify which config file the service is using
sudo <service-name> -V  # (works for Apache, Nginx, etc.)

# Re-validate config syntax
sudo nginx -t
sudo apachectl configtest

“Доступ заборонено” при виконанні команд служби

Причина: Недостатньо привілеїв.

Рішення: Завжди використовуйте sudo або переключіться на користувача root:

sudo systemctl restart <service-name>
# or
su -c "systemctl restart <service-name>"

systemd повідомляє “Unit Not Found”

Причина: Назва служби неправильна або служба не встановлена.

Рішення:

# Search for the correct service name
sudo systemctl list-units --type=service | grep <partial-name>

# Or list all available unit files
sudo systemctl list-unit-files | grep <partial-name>

Управління службами в інфраструктурі AlexHost

Якщо ви запускаєте служби в інфраструктурі AlexHost, команди управління службами, розглянуті в цьому посібнику, безпосередньо застосовуються до вашого середовища. Плани VPS Хостингу від AlexHost працюють на сучасних дистрибутивах Linux з повною підтримкою systemd, надаючи вам повний контроль над вашим стеком служб через SSH.

Для адміністраторів, які надають перевагу графічному інтерфейсу для управління службами, AlexHost пропонує VPS з cPanel та ряд Панелей керування VPS, які забезпечують управління службами через графічний інтерфейс разом із повним доступом до командного рядка.

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

Для команд, що запускають веб-додатки та потребують надійної поштової інфраструктури, Поштовий хостинг від AlexHost надає кероване рішення, яке усуває складність самостійного налаштування та обслуговування демонів поштового сервера, таких як Postfix та Dovecot.

А якщо ви розміщуєте веб-сайти, що обробляють конфіденційні дані користувачів, поєднання вашого хостингу з SSL Сертифікатом забезпечує зашифровані з’єднання — і пам’ятайте, що після встановлення або оновлення SSL сертифіката вам потрібно буде перезапустити демон вашого веб-сервера (Apache або Nginx), щоб зміни набули чинності.

Висновок

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

  • systemd (сучасний Linux): sudo systemctl restart <service-name>
  • SysVinit (застарілий Linux): sudo service <service-name> restart
  • Upstart (старий Ubuntu): sudo initctl restart <service-name>

Але окрім знання команд, справді ефективне управління службами означає розуміння того, коли використовувати reload замість restart, як перевіряти конфігурацію перед застосуванням змін, як читати журнали, коли щось іде не так, і як забезпечити виживання служб після перезавантаження системи.

Опануйте ці техніки, і ви будете готові підтримувати безперебійну роботу ваших серверів Linux, мінімізувати простої та швидко й впевнено вирішувати проблеми зі службами — незалежно від того, чи керуєте ви одним VPS, чи парком виділених серверів.

15%

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

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

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

Skills
Почати