Основные команды для работы с systemctl
systemctl reload ssh обновить конфигурацию сервиса из файла юнита (если у юнита есть эта функция)
systemctl status ssh отображает состояние системы, юнитов (в том числе Failed) и запущенные процессы пользователей
systemctl status sshd | grep -P "Active.+;" | sed -r "s/.+; | ago//g" время работы службы
systemctl start ssh запустить юнит (до перезагрузки)
systemctl stop ssh остановить юнит (до перезагрузки)
systemctl restart ssh перезапустить сервис
systemctl enable ssh добавить в автозагрузку
systemctl disable ssh удалить из автозагрузки
systemctl mask ssh выключить юнит, который нельзя будет запустить вручную или как зависимость (создает симлинк на /dev/null)
systemctl unmask ssh включить юнит (удалить симлинк)
systemctl daemon-reload перезапустить юнит systemd
systemctl cat ssh отобразить путь и содержимое unit-файла
systemctl edit --full ssh открыть для редактирования файл юнита
systemctl list-dependencies ssh дерево зависимостей
systemctl list-dependencies ssh --reverse зависящие сервисы от указанного юнита
systemctl list-units --type service --all отображение статуса всех сервисов
systemctl list-unit-files | sed "1d;$ d" | sed "$ d" | wc отобразить кол-во всех файлов конфигурации сервисов на диске
systemctl list-unit-files | grep zabbix отфильтровать по имени
systemctl list-unit-files --type=service список всех сервисов
systemctl list-unit-files --type=service --state=enabled список сервисов, добавленных в автозагрузку
systemctl list-units --all --type=service --plain --no-legend --no-pager --output=json
--all выводить все типы юнитов, включая активные, неактивные и остановленные
--type=service выводить только системные службы управляемые systemd (не ключает в вывод другие типы юнитов, такие как socket или device)
--plain вывод в текстовом формате без форматирования
--no-legend отключает вывод заголовков для столбцов
--no-pager отключает использование постраничного вывода (less)
ls /usr/lib/systemd/system юниты поставляемые вместе с системой и устанавливаемыми приложениями
ls /run/systemd/system юниты созданные динамически в runtime
ls /etc/systemd/system юниты системного администратора
Утилита systemctl-tui
cargo install systemctl-tui --locked быстрый и простой TUI-интерфейс для взаимодействия с службами и журналами systemd на Rust (https://github.com/rgwood/systemctl-tui), от создателя NuShell
systemctl-tui
Как выглядит unit
#!/bin/bash
while true; do
addr="google.com"
path="/var/log/icmp-test.log"
date=$(date | awk '{print $3,$2,$4}')
loss=$(ping -c 2 $addr | grep -Ewo "[0-9]+%")
if [ $loss = "100%" ]; then
echo "$date: $addr - unavailable" >> $path
else
echo "$date: $addr - available" >> $path
tail -n 1 $path
fi
sleep 5
done
nano /etc/systemd/system/icmp-test-log.service
[Unit]
Description=icmp test output to log
After=network.target
[Service]
ExecStart=/bin/bash "/root/google-icmp-test.sh"
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
Type=simple
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable icmp-test-log.service
systemctl start icmp-test-log
systemctl status icmp-test-log
tail -f /var/log/icmp-test.log
Просмотр журналов через journalctl
journalctl --system отобразить системный журнал
journalctl --user отобразить пользовательский журнал текущего пользователя
journalctl -m отобразить записи из всех доступных журналов (--merge)
journalctl -ek отобразить только сообщения ядра (kernel, --dmesg) из текущей загрузки
journalctl -t systemd показать записи с указанным идентификатором системного журнала
journalctl _PID=3972315 отобразить сообщения по PID процесса
journalctl -eu ssh отобразить сообщения с конца (--pager-end) для выбранного сервиса (--unit)
g перейти в начало листинга
G перейти в конец
journalctl -fu ssh выводить новые сообщения в реальном времени (-f/--follow)
journalctl -fu ssh выводить новые сообщения в реальном времени (-f/--follow)
journalctl -ru ssh вывести сообщения с конца (сверху новые записи, --reverse)
journalctl -n 100 -u ssh --no-pager вывести 100 строк (--lines) из журнала и не передавать вывод на автоматический скроллинг
journalctl -p 3 вывести записи с указанным приоритетом, например, только ошибки и выше по важности: неработоспособность(0), alerts(1), critical(2), errors(3), warning(4), notice(5), info(6), debug(7)
journalctl -S "2023-09-01 12:00:00" -U "2023-09-01 15:00:00" отобразить сообщения от (--since) 1 сентября c 12:00:00 по (--until) 15:00:00
journalctl --since today отобразить сообщения за сегодня
journalctl -b отобразить сообщения с момента последней загрузки системы (boot)
journalctl --list-boots показать список сохраненных загрузок системы
journalctl -b ba6b2292a0e84d83a81cedfaa221926f показать сообщения с момента конкретной загрузки системы (--boot)
journalctl --quiet не показывать информационные сообщения и предупреждения о привилегиях
journalctl --no-hostname подавить вывод поля имени хоста
journalctl -n 1 --no-pager --output=json-pretty вывод в формате JSON (json-sse, json-seq)
journalctl -n 1 --no-pager --output=json-pretty --output-fields=PRIORITY,MESSAGE отфильтровать вывод
journalctl --fields вывести список всех используемых полей (UNIT, USER_UNIT, _SYSTEMD_UNIT, _SYSTEMD_USER_UNIT и т.д.)
journalctl --field=UNIT > system_units.log вывести список всех юнитов в системе
journalctl --field=USER_UNIT > user_units.log вывести список всех пользовательских юнитов в системе
comm -12 <(sort system_units.log) <(sort user_units.log) построчное сравнение двух отсортированных файлов со списком журналов без вывода общих строк в 1 и 2 файлах (-12)
journalctl --disk-usage вывести общее использование диска всеми файлами журнала (Archived and active journals take up 2.3G in the file system)
journalctl --flush очистить все данные журнала из директорий /run в /var
journalctl --vacuum-time=1month удалить файлы журнала, старше указанного времени (1-го месяца)
journalctl --vacuum-size=100M очистить логи, чтобы размер хранилища соответствовал указанному размеру
journalctl --vacuum-files=100 оставить только указанное количество файлов журнала
journalctl --rotate запустить немедленную ротацию файлов журнала
journalctl --sync синхронизировать незаписанные сообщения журнала на диск
journalctl --relinquish-var прекратить запись на диск, войти во временную файловую систему
journalctl --verify проверить целостность файла журнала
journalctl --header вывести список журналов
File path - путь к файлу журнала на диске
Incompatible flags - несовместимые флаги с этим журналом
Rotate suggested - применяется ли ротация к журналу
Tail sequential number - последовательный номер для конца журнала (указывает на последнее событие в журнале)
Head realtime timestamp - время первого события в журнале
Tail realtime timestamp - время последнего события в журнале
Objects - количество объектов, находящихся в журнале (таких как записи, и не только)
Entry objects - количество объектов, представляющих записи в журнале
Data objects - количество объектов данных, хранящихся в журнале
Field objects - Количество объектов полей (список полей можно получить через --fields)
Disk usage - используемое пространство на диске для этого журнала
nano /etc/systemd/journald.conf
Storage=auto # журналы сохраняются в /var/log/journal на диске (если доступно достаточно места), или в памяти (/run/log/journal) при недостатке места на диске
Storage=persistent # журналы всегда сохраняются на диске
Storage=volatile # журналы хранятся только в памяти (не сохраняются на диск)
Storage=none # журналы не сохраняются
Seal=yes # включает подписание журналов для обеспечения их целостности. Это добавляет цифровую подпись в журналы, чтобы защитить их от изменений
SyncIntervalSec=5m # интервал между синхронизациями журнала с диском (5 минут)
RateLimitIntervalSec=30s # временной интервал, в течение которого будет ограничено количество записей журнала, если они приходят слишком часто
RateLimitBurst=10000 # максимальное количество записей, которое можно сделать в журнал за интервал RateLimitIntervalSec
SystemMaxUse=500M # ограничивает максимальное количество дискового пространства, которое могут занимать системные журналы, если пространство превышает этот лимит, старые журналы будут удаляться
SystemKeepFree=1G # минимальное количество свободного места на диске, которое должно оставаться для других системных задач, если места на диске становится меньше, система начнет удалять старые журналы
SystemMaxFileSize= # ограничивает размер одного файла журнала на диске. Если файл превышает этот размер, он будет разделен
SystemMaxFiles=100 # максимальное количество файлов журнала, которые могут быть созданы, старые файлы будут удаляться, чтобы освободить место для новых
MaxRetentionSec=1month # максимальный срок хранения журналов (например, журналы будут храниться не более месяца)
ForwardToSyslog=yes # должны ли записи журнала перенаправляться в системный журнал (syslog), это позволяет перенаправлять журнал в другие системы, например, rsyslog
orwardToKMsg=no # должны ли записи журнала перенаправляться в буфер ядра (KMsg)
ForwardToConsole=no # должны ли записи журнала отображаться на консоли работающего в системе через TTY (не в терминал других пользователей)
ForwardToWall=yes # должны ли записи журнала отображаться всем пользователям, работающим в системе (уведомления будут выводиться всем пользователям через команду wall)
MaxLevelStore=debug # максимальный уровень журналируемых записей, которые будут сохраняться (emerg, alert, crit, error, warning, notice, info, debug)
MaxLevelSyslog=debug # максимальный уровень журналируемых записей, которые будут отправляться в syslog
MaxLevelWall=emerg # максимальный уровень журналируемых записей, которые будут выводиться всем пользователям через команду wall
LineMax=48K # максимальный размер строки, которая может быть записана в журнал (по умолчанию 48 КБ)
Audit=no # журналировать события аудита (связанных с безопасностью, например, вход в систему, попытки доступа к файлам и изменения файловых прав, Запуск и завершение процессов и т.п.)
sudo systemctl restart systemd-journald