Донецкий техникум промышленной автоматики

Управління службами Linux

  1. трохи теорії
  2. утиліта systemctl
  3. Управління службами Linux
  4. Автозавантаження служб в systemd
  5. висновки

В операційній системі linux, так само як і в Windows, крім звичайних програм, які можуть взаємодіяти з користувачем є ще один вид програм. Це що працюють у фоновому режимі служби. Важливість служб важко переоцінити, вони стежать за станом системи, забезпечують автоматичне підключення зовнішніх пристроїв і мережі, дозволяють процесам взаємодіяти з обладнанням (dbus), а також у вигляді служб реалізовані різні веб-сервери і сервери баз даних. На відміну від призначених для користувача програм, служби виконуються у фоновому режимі, і користувач не має до них прямого доступу. Користувач ще не увійшов в систему, тільки почалося завантаження а основні служби вже запущені і працюють.

У цій статті ми розглянемо управління службами Linux. Ми не будемо чіпати вже застарілі системи, такі як SysVinit, зосередимося тільки на Systemd. Ви дізнаєтеся, як подивитися запущені служби linux, а також зупиняти і запускати їх самому.

Зміст статті:

трохи теорії

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

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

Служба в Systemd описується файлом юніта, в ньому описано що з нею потрібно робити і як себе вести. Існують такі типи служб:

  • service - звичайна служба, програма
  • target - група служб
  • automount - точка автоматичного монтування
  • device - файл пристрою, генерується на етапі завантаження
  • mount - точка монтування
  • path - файл або папка
  • scope - процес
  • slice - група системних служб systemd
  • snapshot - збережений стан запущених служб
  • socket - сокет для взаємодії між процесами.

Нас будуть цікавити тільки service, і зовсім небагато target, але ми розглянули всі інші, щоб ви змогли поглянути на картину трохи ширше. Основи розглянули, тепер буде настройка служб LInux.

утиліта systemctl

У Systemd є спеціальний інструмент для управління службами в Linux - systemctl. Ця утиліта дозволяє робити дуже багато речей, починаючи від перезапуску служби linux і перевірки її стану, до аналізу ефективності завантаження служби. Синтаксис у утиліти такої:

$ Systemctl опції команда служба служба ...

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

Розглянемо все по порядку. Опції дуже сильно залежать від команд, тому розглянемо їх пізніше, а поки пройдемося по командах:

  • list-units - подивитися всі служби (юніти), аналог опції -t
  • list-sockets - подивитися всі служби сокетов
  • start - запустити службу linux
  • stop - зупинити службу linux
  • reload - оновити конфігурацію служби з файлу юніта
  • restart - перезапустити службу
  • try-restart - перезапустити службу, тільки якщо вона запущена
  • reload-or-restart - оновити конфігурацію потім виконати перезапуск служби linux, якщо не підтримується - тільки перезапустити
  • isolate - запустити тільки одну службу разом з її залежностями, всі інші зупинити
  • kill - відправити сигнал завершення процесу використовується разом з опціями --signal і --kill-who
  • is-active - перевірити чи запущена служба linux
  • is-failed - перевірити не завершилася служба з помилкою
  • status - подивитися стан і висновок служби
  • show - подивитися параметри управління службою в Linux
  • reset-failed - перезапустити служби linux, що завершилися з помилкою
  • list-dependencies - подивитися залежності служби linux
  • list-unit-files - вивести всі встановлені файли служб
  • enable - додати службу в автозавантаження
  • disable - видалити службу з автозавантаження
  • is-enabled - перевірити чи є вже служба в автозавантаженні
  • reenable - спочатку виконати disable потім enable для служби
  • list-jobs - всі запущені служби linux незалежно від типу
  • snapsot - зберегти стан служб, щоб потім відновити
  • daemon-reload - оновити конфігурацію всіх служб
  • mask - зробити юніт недоступним
  • unmask - повернути файл служби linux

А тепер основні опції:

  • -t, --type - тип служб для виведення
  • -a, --all - показати всі відомі служби, навіть не запущені
  • -q - мінімальний висновок
  • --version - версія програми
  • --no-pager - не використовувати посторінкову навігацію
  • --no-legend - не виводити докладний опис
  • -f - примусове виконання команди
  • --runtime - Ніколи не зберігати внесені зміни після перезавантаження
  • -n - кількість рядків виводу балки для команди status
  • --plain - використовувати звичайний текстовий режим замість дерев
  • --kill-who - задати процес, якому потрібно відправити сигнал
  • --signal - сигнал, який потрібно відправити.
  • --state - відфільтрувати список служб станом.

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

Управління службами Linux

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

systemctl list-units --type service

systemctl list-units --type service

Команда відобразила всі служби, які відомі systemd, вони зараз запущені або були запущені. Програма не переглядає всі файли, тому будуть показані тільки ті служби, до яких вже зверталися. Стан loaded - означає, що конфігураційний файл був успішно завантажений, наступна колонка active - служба була запущена, а running або exited значить виконується зараз служба або вона успішно завершила свою роботу. Гортати список можна кнопками вгору / вниз.

Наступна команда дозволяє отримати список служб linux, в який входять всі служби, навіть не запущені, ті, які не запускалися, але відомі systemd, але це ще не все служби в системі:

systemctl list-units --type service -all

systemctl list-units --type service -all

Дальше більше. Ви можете відсортувати список служб systemctl станом. Наприклад, тільки виконуються:

systemctl list-units --type service --state running

Або ті, які завершилися з помилкою:

systemctl list-units --type service --state failed

systemctl list-units --type service --state failed

Для фільтрації можна брати будь-який показник стану з будь-якої колонки. Інший командою ми можемо подивитися всі файли конфігурації служб на диску. Тут не будемо фільтрувати по типу, нехай програма покаже всі:

systemctl list-unit-files

Тепер Отфильтруем тільки служби linux:

systemctl list-unit-files --type service

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

Щоб запустити службу використовується команда start, наприклад:

sudo systemctl start application.service

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

Зупинити службу linux можна командою:

sudo systemctl stop application

Подивитися стан служби дозволяє команда status:

sudo systemctl status application

sudo systemctl status application

Тут ви можете бачити, стан running, exited, dead, failed і т д. А також декілька останніх рядків виводу програми, які дуже допоможуть вирішити проблему із запуском якщо вона виникне.

Автозавантаження служб в systemd

Як ви знаєте, systemd дозволяє автоматично завантажувати служби при запуску системи в міру їх потреби. Команда list-unit-files показує додана чи служба в автозавантаження.

Взагалі, тут може бути кілька станів - enabled - в автозавантаження, disabled - автозавантаження відключена, masked - служба прихована і static - значить що служба в автозавантаженні, але ви не можете її відключити.

Тому щоб отримати список служб linux, що запускаються автоматично досить відфільтрувати її висновок щодо стану:

systemctl list-unit-files --state enabled

systemctl list-unit-files --state enabled

Всі служби, що запускаються за замовчуванням. Можете також подивитися служби static. Щоб додати службу в автозавантаження linux використовуйте команду enable:

sudo systemctl enable application

sudo systemctl enable application

А для того щоб прибрати її з автозавантаження:

sudo systemctl disable applciation

Також, ви можете подивитися чи дозволено зараз автозагрзука для служби:

sudo systemctl is-enabled application

sudo systemctl is-enabled application

Утиліта просто виведе стан enabled, disabled або static.

висновки

Тепер настройка служб Linux не викличе у вас проблем. Багато чого ми упустили, systemd - дуже велика, складна і багатофункціональна система, що її охопити в одній статті. Але і також дуже складно зрозуміти. Але я думаю, що все, що стосується управління службами Linux ми розібрали. Якщо у вас залишилися питання, питайте в коментарях!

Оцініть статтю: