TGViewer
NetworkAdmin.ru NetworkAdmin.ru @networkadminru · 4.7K subscribers
Post #720 2.34K
🧑‍💻 Создание и отладка собственных сервисов

Systemd давно стал стандартом для запуска, управления и наблюдения за сервисами. Но многие используют его только для управления уже существующими демонами и не создают собственные unit-файлы, а ведь это удобный способ автоматизировать любые скрипты, фоновые процессы или приложения.

▪️ Шаг 1: создаём unit-файл. Все пользовательские сервисы кладутся в:


/etc/systemd/system/


Пример простого сервиса, который запускает bash-скрипт:


/etc/systemd/system/myapp.service

[Unit]
Description=My custom app
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/myapp.sh
Restart=on-failure
User=myuser
Group=myuser

[Install]
WantedBy=multi-user.target


Несколько рекомендаций по параметрам:

Type=simple - подходит для скриптов и обычных демонов
Restart=on-failure - перезапуск при сбоях
User=… - всегда запускайте сервисы НЕ от root, если это возможно
After=network.target - ожидаем сеть перед запуском


▪️ Шаг 2: корректно пишем исполняемый скрипт. Для стабильной работы сервисов:

указываем shebang (#!/bin/bash);
используем абсолютные пути к бинарникам;
перенаправляем вывод в syslog или файл (если нужно);
завершаемся с кодами ошибок.

Пример:


#!/bin/bash
set -e

echo "Service started"
ping -c 1 8.8.8.8


Не забываем:


chmod +x /usr/local/bin/myapp.sh


▪️ Шаг 3: включаем и запускаем сервис


systemctl daemon-reload
systemctl enable --now myapp.service


Проверяем статус:


systemctl status myapp.service


▪️ Отладка. Systemd имеет отличные инструменты диагностики.

Посмотреть логи сервиса:


journalctl -u myapp.service -f


Проверить последнюю ошибку:


systemctl status myapp.service


Проверить, что systemd видит изменения:


systemctl daemon-reload


Принудительно перезапустить сам процесс:


systemctl restart myapp.service


▪️ Полезные параметры, которые часто забывают

LimitNOFILE - увеличить максимальное количество файлов
LimitNOFILE=65535

WorkingDirectory - задать рабочую директорию
WorkingDirectory=/opt/myapp

Environment - задать переменные окружения
Environment="APP_ENV=prod"

▪️ Безопасность. Systemd умеет частично изолировать сервисы, похожим образом на контейнеры, например:


ProtectSystem=full
ProtectHome=true
PrivateTmp=true
NoNewPrivileges=true


#linux #systemd

🧑‍💻 NetworkAdmin
  • 👍 11
  • ❤ 1
More from @networkadminru
  1. Oct 1, 2026✨ Systemd-команды, которые быстро дают информацию о системе У systemd есть несколько коман…
  2. Oct 1, 2026CENTI CONF: DevOps Day — митап по разработке и инженерным решениям ⚡️ 6 ноября Centicore G…
  3. Sep 30, 2026🖥 Get-ADUser: полезные примеры для работы с пользователями Active Directory Get-ADUser -…
  4. Sep 30, 2026👁‍🗨 Хочешь разбираться в информационной безопасности, а не просто копировать чужие коман…
  5. Sep 29, 2026🥱 Как быстро разобраться с дисками и маунтами Когда на сервере несколько дисков, LVM, отд…
  6. Sep 28, 2026🔎 TCP keepalive: как находить мертвые соединения до того, как они создадут проблему Иногд…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →