systemd unit — template

If you like this project, consider supporting me on Buy Me a Coffee ☕️

systemd Unit File Templates & Reference

systemd unit files define how systemd manages services, timers, sockets, and other system resources. This cheatsheet provides production-ready templates for creating custom unit files from scratch.

Unit file types / Типы юнит-файлов:

Priority order for unit files / Приоритет юнит-файлов:

  1. /etc/systemd/system/ — admin overrides (highest priority)
  2. /run/systemd/system/ — runtime units
  3. /lib/systemd/system/ — package-provided units (lowest priority)

Workflow / Рабочий процесс:

  1. Create unit file in /etc/systemd/system/
  2. Run systemctl daemon-reload
  3. Enable and start: systemctl enable --now <unit>
  4. Verify: systemctl status <unit> + journalctl -u <unit>

📚 Table of Contents / Содержание

  1. Service Unit Template
  2. Timer Unit Template
  3. Socket Unit Template
  4. Common Directives
  5. Unit Management
  6. Troubleshooting

Service Unit Template

Basic Service / Базовый сервис

/etc/systemd/system/myapp.service

[Unit]
Description=My Application                    # Human description / Описание
After=network-online.target                   # Start after network / После сети
Wants=network-online.target                   # Ensure dependency starts / Зависимость

[Service]
Type=simple                                   # Service type / Тип сервиса
User=<USER>                                   # Run as user / Пользователь
Group=<GROUP>                                 # Run as group / Группа
WorkingDirectory=/opt/myapp                   # Working directory / Рабочая директория
ExecStart=/opt/myapp/bin/myapp --config /etc/myapp/config.yml
ExecReload=/bin/kill -HUP $MAINPID            # Reload command / Команда перезагрузки
Restart=on-failure                            # Restart policy / Политика рестарта
RestartSec=5s                                 # Delay before restart / Задержка рестарта

[Install]
WantedBy=multi-user.target                    # Enable target / Цель включения

Service with Environment / Сервис с переменными окружения

[Service]
Environment=NODE_ENV=production               # Single variable / Одна переменная
Environment="DB_HOST=<HOST>" "DB_PORT=5432"   # Multiple / Несколько
EnvironmentFile=/etc/myapp/env                # From file / Из файла

Service Types / Типы сервисов

Type Description (EN / RU) Use Case
simple Default, main process (ExecStart) / По умолчанию Most daemons
forking Forks, parent exits / Форкается, родитель завершается Traditional daemons (Apache)
oneshot One-time task, then exits / Однократное выполнение Scripts, setup tasks
notify Sends notification when ready / Отправляет уведомление Apps with sd_notify() support
dbus Acquires D-Bus name / Получает имя D-Bus D-Bus services
idle Delayed until other jobs finish / Отложенный запуск Low-priority startup

Timer Unit Template

Basic Timer / Базовый таймер

/etc/systemd/system/backup.timer

[Unit]
Description=Daily Backup Timer                # Timer description / Описание таймера

[Timer]
OnCalendar=*-*-* 02:00:00                     # Every day at 2 AM / Каждый день в 2:00
Persistent=true                               # Run if missed / Выполнить если пропущено
Unit=backup.service                           # Service to trigger / Сервис для запуска

[Install]
WantedBy=timers.target

OnCalendar Examples / Примеры расписаний

Expression Schedule (EN / RU)
*-*-* 00:00:00 Daily at midnight / Ежедневно в полночь
Mon *-*-* 08:00:00 Every Monday 8 AM / Каждый понедельник 8:00
*-*-01 00:00:00 Monthly on 1st / Ежемесячно 1-го числа
*-*-* *:00:00 Every hour / Каждый час
*-*-* *:*:00 Every minute / Каждую минуту
weekly Weekly / Еженедельно
hourly Hourly / Ежечасно

Interval Timer / Таймер по интервалу

[Timer]
OnBootSec=5min                                # After boot / После загрузки
OnUnitActiveSec=1h                            # Every hour after last run / Каждый час после запуска
OnStartupSec=10min                            # After systemd starts / После старта systemd

Socket Unit Template

TCP Socket / TCP сокет

/etc/systemd/system/myapp.socket

[Unit]
Description=MyApp Socket                      # Socket description / Описание сокета

[Socket]
ListenStream=8080                             # TCP port / TCP порт
Accept=no                                     # Single process / Один процесс

[Install]
WantedBy=sockets.target

Unix Socket / Unix сокет

[Socket]
ListenStream=/run/myapp/myapp.sock            # Unix socket path / Путь к сокету
SocketUser=<USER>                             # Socket owner / Владелец сокета
SocketGroup=<GROUP>                           # Socket group / Группа сокета
SocketMode=0660                               # Socket permissions / Права сокета

Common Directives

[Unit] Section / Секция [Unit]

Description=                                  # Human-readable name / Читаемое имя
Documentation=https://example.com/docs        # Documentation link / Ссылка на документацию
After=                                        # Start after / Запустить после
Before=                                       # Start before / Запустить до
Requires=                                     # Hard dependency / Жёсткая зависимость
Wants=                                        # Soft dependency / Мягкая зависимость
Conflicts=                                    # Cannot run with / Конфликтует с

[Service] Section / Секция [Service]

ExecStartPre=                                 # Before ExecStart / Перед ExecStart
ExecStartPost=                                # After ExecStart / После ExecStart
ExecStop=                                     # Stop command / Команда остановки
TimeoutStartSec=90                            # Start timeout / Таймаут запуска
TimeoutStopSec=30                             # Stop timeout / Таймаут остановки
StandardOutput=journal                        # Output to journal / Вывод в журнал
StandardError=journal                         # Errors to journal / Ошибки в журнал
SyslogIdentifier=myapp                        # Journal identifier / Идентификатор в журнале

Restart Policies / Политики рестарта

Policy Description (EN / RU)
no Never restart / Никогда не рестартовать
on-success Only on clean exit / Только при успешном завершении
on-failure On non-zero exit / При ненулевом коде выхода
on-abnormal On signal/timeout / При сигнале/таймауте
always Always restart / Всегда рестартовать

Security Hardening / Усиление безопасности

NoNewPrivileges=true                          # Block privilege escalation / Блок повышения привилегий
ProtectSystem=strict                          # Read-only / and /usr / Только чтение / и /usr
ProtectHome=true                              # No access to /home / Без доступа к /home
PrivateTmp=true                               # Private /tmp / Приватный /tmp
ReadOnlyPaths=/etc                            # Read-only paths / Пути только для чтения

Unit Management

Reload and Enable / Перезагрузка и включение

sudo systemctl daemon-reload                  # Reload unit files / Перезагрузить юниты
sudo systemctl enable myapp                   # Enable at boot / Включить при загрузке
sudo systemctl enable --now myapp             # Enable and start / Включить и запустить
sudo systemctl disable myapp                  # Disable at boot / Отключить при загрузке

Control Service / Управление сервисом

sudo systemctl start myapp                    # Start service / Запустить сервис
sudo systemctl stop myapp                     # Stop service / Остановить сервис
sudo systemctl restart myapp                  # Restart service / Перезапустить сервис
sudo systemctl reload myapp                   # Reload config / Перезагрузить конфиг
sudo systemctl status myapp                   # Check status / Проверить статус

Timer Management / Управление таймерами

sudo systemctl enable backup.timer            # Enable timer / Включить таймер
sudo systemctl start backup.timer             # Start timer / Запустить таймер
systemctl list-timers                         # List active timers / Список таймеров
systemctl list-timers --all                   # All timers / Все таймеры

Troubleshooting

Check Logs / Проверка логов

journalctl -u myapp.service                   # Service logs / Логи сервиса
journalctl -u myapp.service -f                # Follow logs / Следить за логами
journalctl -u myapp.service --since today     # Today's logs / Логи за сегодня
systemctl status myapp                        # Quick status / Быстрый статус

Validate Unit / Валидация юнита

systemd-analyze verify /etc/systemd/system/myapp.service  # Check syntax / Проверить синтаксис
systemctl cat myapp                           # Show unit content / Показать содержимое
systemctl show myapp                          # Show all properties / Показать свойства

Debug / Отладка

systemctl list-dependencies myapp             # Show dependencies / Показать зависимости
systemctl list-units --failed                 # Failed units / Проваленные юниты
systemctl reset-failed                        # Reset failed state / Сбросить состояние

💡 Best Practices / Лучшие практики


On this page

systemd Unit File Templates &amp; Reference 📚 Table of Contents / Содержание Service Unit Template Basic Service / Базовый сервис Service with Environment / Сервис с переменными окружения Service Types / Типы сервисов Timer Unit Template Basic Timer / Базовый таймер OnCalendar Examples / Примеры расписаний Interval Timer / Таймер по интервалу Socket Unit Template TCP Socket / TCP сокет Unix Socket / Unix сокет Common Directives [Unit] Section / Секция [Unit] [Service] Section / Секция [Service] Restart Policies / Политики рестарта Security Hardening / Усиление безопасности Unit Management Reload and Enable / Перезагрузка и включение Control Service / Управление сервисом Timer Management / Управление таймерами Troubleshooting Check Logs / Проверка логов Validate Unit / Валидация юнита Debug / Отладка 💡 Best Practices / Лучшие практики Documentation Links