Глиф Учебники

Урок 5. Службы systemd и журналы

Курс «Debian» · урок 5 из 8 · 4 минуты чтения

Служба (по-английски service, ещё говорят «демон») — программа, которая работает в фоне без окна: сервер SSH, веб-сервер, база данных, планировщик. Запускает и следит за службами systemd — первая программа, которую запускает ядро (основа системы, которая работает с оборудованием) при загрузке. Управляют им командой systemctl.

Состояние службы

Bash
systemctl status ssh

Главное в ответе — две строки:

Ниже — последние строки журнала этой службы. Если ответ не помещается на экран, он открывается для прокрутки: выход — клавиша q.

$ systemctl status ssh ● ssh.service - OpenBSD Secure Shell server 1 Loaded: loaded (…/ssh.service; enabled; preset: enabled) 2 Active: active (running) since … 3 … sshd[612]: Server listening on 0.0.0.0 port 22. 1 Автозагрузка enabled включена disabled выключена действует при загрузке 2 Состояние сейчас active (running) работает inactive (dead) остановлена failed упала 3 Журнал последние строки службы выход — q
В ответе systemctl status ssh строка Loaded показывает автозагрузку enabled или disabled, строка Active — состояние сейчас, ниже идут строки журнала службы.

Запустить, остановить, перезапустить

ЗадачаКоманда
Запуститьsudo systemctl start ssh
Остановитьsudo systemctl stop ssh
Перезапуститьsudo systemctl restart ssh
Перечитать настройки без остановки (если служба умеет)sudo systemctl reload ssh
Включить в автозагрузкуsudo systemctl enable ssh
Включить и сразу запуститьsudo systemctl enable --now ssh
Убрать из автозагрузкиsudo systemctl disable ssh

start и stop действуют сейчас, enable и disable — на следующие загрузки. Это разные вещи: остановленная служба после перезагрузки запустится снова, если она enabled.

$ sudo systemctl stop ssh работает сразу остановлена перезагрузка работает stop не трогает автозагрузку enabled — запустилась сама $ sudo systemctl disable ssh работает сразу работает перезагрузка остановлена disable не останавливает disabled — не запустилась
Служба ssh после stop останавливается, но после перезагрузки запускается снова, а после disable работает дальше и не запускается только при следующей загрузке.

В Debian служба обычно запускается и включается в автозагрузку сразу после установки пакета: поставили openssh-server — сервер SSH уже работает. Исключения бывают: например, брандмауэр nftables после установки выключен, пока вы сами его не включите.

Какие службы есть

Bash
systemctl list-units --type=service
systemctl --failed
systemctl list-unit-files --type=service --state=enabled

Первая команда показывает загруженные службы, вторая — упавшие, третья — включённые в автозагрузку.

Журнал: journalctl

Сообщения служб и ядра собирает журнал systemd. Читает его команда journalctl:

Что показатьКоманда
Последние записи, с концаsudo journalctl -e
Новые записи по мере появления (выход — Ctrl+C)sudo journalctl -f
Записи одной службыsudo journalctl -u ssh
С начала текущей загрузкиsudo journalctl -b
С прошлой загрузки (например, после сбоя)sudo journalctl -b -1
Только ошибки и важнееsudo journalctl -p err
За последний часsudo journalctl --since "1 hour ago"

Ключи можно сочетать: sudo journalctl -u ssh -b -p err — ошибки SSH с начала загрузки.

Без sudo обычный пользователь видит только записи своих программ. Чтобы читать весь журнал без sudo, пользователя добавляют в группу systemd-journal или adm:

Bash
sudo usermod -aG systemd-journal ivan

Действует после нового входа.

Где /var/log/syslog

В инструкциях из интернета часто советуют смотреть /var/log/syslog или /var/log/auth.log. В Debian 12 и новее этих файлов по умолчанию нет: программа rsyslog, которая их писала, больше не ставится. Все сообщения — в журнале systemd, он хранится на диске в /var/log/journal и переживает перезагрузку.

Вместо tail -f /var/log/syslog — sudo journalctl -f, вместо /var/log/auth.log — sudo journalctl -u ssh для входов по SSH. Если какой-то программе нужны именно текстовые файлы, поставьте rsyslog:

Bash
sudo apt install rsyslog
Службы ssh и другие Ядро его сообщения Журнал systemd /var/log/journal хранится на диске, переживает перезагрузку journalctl -u ssh служба -b эта загрузка -f новые записи -p err ошибки только если поставить rsyslog /var/log/syslog /var/log/auth.log В Debian 12 и новее этих файлов нет rsyslog, который их писал, не ставится sudo apt install rsyslog — если они нужны
Сообщения служб и ядра собирает журнал systemd в /var/log/journal, читает его journalctl, а файлы /var/log/syslog и auth.log появляются только с rsyslog.

Место под журнал

Журнал сам ограничивает свой размер, но на маленьком диске его можно сократить:

Bash
sudo journalctl --disk-usage
sudo journalctl --vacuum-size=200M

Первая команда показывает, сколько места занято, вторая удаляет старые записи, пока журнал не станет меньше 200 МБ.

Если служба не запускается

  1. systemctl status имя — состояние и последние строки журнала.
  2. sudo journalctl -u имя -b — все записи службы с начала загрузки; причина обычно в последних строках.
  3. Проверьте настройки программы её собственной проверкой, если она есть: sudo sshd -t, sudo nginx -t.
  4. После правки файлов служб в /etc/systemd/system/ — sudo systemctl daemon-reload, иначе systemd их не заметит.

Свои добавки к настройкам службы удобнее делать через sudo systemctl edit имя: команда откроет редактор и сохранит изменения отдельным файлом, который не перезапишется при обновлении пакета.

Настройки ядра в Debian 13

Параметры ядра (например, net.ipv4.ip_forward — пересылка пакетов между сетями) задают файлами в /etc/sysctl.d/. В Debian 13 при загрузке файл /etc/sysctl.conf больше не читается — если вы обновились с Debian 12 и что-то писали туда, перенесите строки в отдельный файл (его ещё нет — nano создаст его при сохранении):

Bash
sudo nano /etc/sysctl.d/99-local.conf
sudo sysctl --system

В файле — строки вида net.ipv4.ip_forward = 1. Вторая команда применяет настройки сразу, без перезагрузки.

Коротко

Проверьте себя

1. Служба остановлена командой systemctl stop, но включена (enabled). Что будет после перезагрузки?
2. Где в Debian 12 смотреть сообщения, которые раньше писались в /var/log/syslog?
3. Какая команда показывает записи журнала только службы ssh?
4. Что нужно сделать после правки файла службы в /etc/systemd/system?