Перейти к содержимому
RunStack
Вики· Обновлено 19 окт. 2026 г.

Шпаргалка: systemd

systemctl и journalctl: сервисы, автозапуск, журнал, свой unit, таймеры вместо cron.

Сервисы

systemctl status nginx
systemctl start | stop | restart | reload nginx
systemctl enable --now nginx               # автозапуск и запустить сейчас
systemctl disable --now nginx
systemctl is-active nginx; systemctl is-enabled nginx
systemctl list-units --type=service --state=running
systemctl --failed                         # что упало
systemctl cat nginx                        # unit-файл со всеми дополнениями
systemctl show nginx -p MainPID -p MemoryCurrent
systemctl daemon-reload                    # после правки unit-файлов

Журнал

journalctl -u nginx -f                     # следить
journalctl -u nginx --since "1 hour ago"
journalctl -u nginx -n 100 --no-pager
journalctl -b -p err                       # ошибки с последней загрузки
journalctl -b -1 -p err                    # ...с предыдущей (почему перезагрузился)
journalctl -k | grep -i oom                # кого убило ядро по памяти
journalctl --disk-usage
journalctl --vacuum-size=500M              # оставить 500 МБ журнала

Свой сервис

/etc/systemd/system/myapp.service:

[Unit]
Description=My app
After=network-online.target
Wants=network-online.target

[Service]
User=myapp
WorkingDirectory=/opt/myapp
EnvironmentFile=/opt/myapp/.env
ExecStart=/opt/myapp/bin/server --port 3000
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
systemctl daemon-reload && systemctl enable --now myapp

Поменять настройку чужого сервиса, не трогая его файл:

systemctl edit nginx                       # создаст override.conf
# [Service]
# LimitNOFILE=65536
systemctl restart nginx

Таймеры вместо cron

/etc/systemd/system/backup.service:

[Unit]
Description=Nightly backup

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh

/etc/systemd/system/backup.timer:

[Unit]
Description=Nightly backup timer

[Timer]
OnCalendar=*-*-* 03:30:00
Persistent=true
RandomizedDelaySec=10m

[Install]
WantedBy=timers.target
systemctl daemon-reload && systemctl enable --now backup.timer
systemctl list-timers                      # когда следующий запуск
systemctl start backup.service             # запустить сейчас
systemd-analyze calendar "Mon *-*-* 09:00" # проверить расписание

Система

systemd-analyze blame | head               # что тормозит загрузку
hostnamectl set-hostname web-1
timedatectl set-timezone Europe/Moscow
timedatectl set-ntp true