Блог компанії 3v-Hosting

Управління службами Systemd за допомогою systemctl в Linux

Адміністрування

8 хв.


Екосистема Linux значно еволюціонувала в плані управління службами. Традиційні скрипти init були популярними протягом багатьох років, але впровадження systemd ознаменувало серйозну зміну. Сьогодні більшість сучасних дистрибутивів Linux, включаючи Ubuntu, Debian, Fedora та CentOS, використовують systemd як систему init за замовчуванням. systemd — це потужна система, яка забезпечує повний контроль над службами та їхнім життєвим циклом за допомогою потужної утиліти systemctl. Будь-який системний адміністратор, розробник або інженер хостингу повинен розуміти, як з нею працювати.

 

 

 

 

Що таке systemd і systemctl

 

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

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

 

 

 

 

Перевірка стану служб

 

Найпоширенішим завданням є перевірка, чи працює служба. Команда:

    systemctl status nginx


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

Використання systemctl status часто є першим кроком у вирішенні проблем, оскільки воно показує як стан служби, так і останні помилки. У поєднанні з journalctl, який показує історичні журнали, це стає потужним діагностичним інструментом.

 

 

 

 

Запуск і зупинка служб

 

Якщо ви хочете запустити службу, використовуйте:

    sudo systemctl start service_name


Щоб зупинити її, використовуйте команду:

    sudo systemctl stop service_name


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

Наприклад, веб-сервер або база даних можуть бути запущені вручну для тестування, а потім вимкнені, щоб уникнути непотрібного споживання ресурсів.

 

 

 

 

Перезапуск і перезавантаження

 

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

    sudo systemctl restart apache2


або просто systemctl restart service, якщо замінити фактичну назву. Ця команда повністю зупиняє і запускає службу.

Однак деякі служби підтримують перезавантаження своєї конфігурації без повного перезапуску. Саме тут стає корисним systemctl reload. Наприклад, Nginx або Postfix можуть перезавантажити нову конфігурацію без відключення активних з'єднань:

    sudo systemctl reload nginx


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

У випадках, коли systemd сам повинен перечитати файли одиниць (наприклад, коли ви щойно змінили файл .service), потрібно виконати:

    sudo systemctl daemon-reload


Це іноді називають systemctl reload daemon, і це гарантує, що systemd знає про нові або оновлені визначення одиниць.

 


 

Інші корисні статті у нашому Блозі:


    - Які обмеження ChatGPT?

    - Найкращий VPS для ігрових серверів (Minecraft, CS:GO, Valheim): продуктивність, налаштування та порівняння

    - Як створити бота в Discord

    - Як зупинити DDoS-атаку

 


 

 

Увімкнення та вимкнення служб

 

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

    sudo systemctl enable service_name


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

    sudo systemctl disable service_name

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

У середовищах, де час безвідмовної роботи та передбачуваність мають критичне значення, важливо розуміти, як systemctl enable та disable взаємодіють із залежностями.

 

 

 

 

Перелік служб і моніторинг

 

Системні адміністратори часто потребують огляду всіх активних і неактивних служб. Команда:

    systemctl list-units --type=service


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


Інший корисний варіант:

    systemctl --failed


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

 

 

 

 

Практичні сценарії

 

У реальному хостингу та адмініструванні systemctl використовується постійно. Наприклад:

    - Після редагування файлу конфігурації Nginx ви можете протестувати його, а потім використовувати systemctl reload nginx, щоб застосувати зміни без простою.
    - Якщо база даних зависла, ви можете виконати команду systemctl restart mysql, щоб перезапустити її.
    - Під час усунення несправностей команда systemctl status надає швидкий огляд причин збою служби.
    - Щоб забезпечити постійне виконання фонової служби, такої як Redis, під час завантаження, адміністратори використовують команду systemctl enable redis-server.
    - Коли служба споживає занадто багато ресурсів, systemctl stop service негайно її зупиняє.

Ці приклади показують, наскільки тісно systemctl інтегрований у робочі процеси адміністрування Linux.

 

 

 

 

Одиниці Systemd, що виходять за межі служб

 

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

Наприклад, заплановані завдання можна керувати за допомогою таймерів systemd замість cron, а активація на основі сокетів може затримати запуск служби до першого вхідного з'єднання. Це демонструє, як systemd забезпечує як простоту, так і розширену гнучкість.

 

 

 

 

Висновок

Systemctl став стандартним інструментом для управління службами в Linux. Опанувавши команди, такі як systemctl status, systemctl restart, systemctl reload, systemctl enable та systemctl stop service, адміністратори отримують надійний контроль над поведінкою системи. Розуміння відмінностей між перезапуском і перезавантаженням, тимчасовими та постійними змінами, а також способами переліку та діагностики служб забезпечує стабільну та безпечну роботу середовищ Linux.

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