TGViewer
Сибирский Dev | IT survival Сибирский Dev | IT survival @sibdevjun · 642 subscribers
Post #344 606
🚬 systemd

#рабочийкейс

Недавно тут переводил приложение с uWSGI веб сервера на Gunicorn и надо было отделить от одного основного процесса с самим сервером все celery воркеры, rsync, sshd на отдельные сервисы.
Ну и помощник в этом конечно же systemd, который прокинет и разрешит все зависимости между ними 👍

Пример простого сервиса, который будет перманентно крутить ваше приложение и перезапускать, если будут ошибки:
1. Создаем файл с сервисом my_server.service:
Description=my service
Wants=postgresql.service another.service
After=syslog.target postgresql.service

[Service]
EnvironmentFile=/etc/environment
User=my_user
Group=my_user
ExecStart=/opt/my_script.sh --some_flag /some/path/program.py --daemon
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

Description - название сервиса, будет видно в списке работающих и зарегистрированных сервисов на машине
Wants - то, что требуется вашему сервису, чтобы работало вместе с ним. Это мягкая зависимость, есть более жесткая, типа Requires, которая не даст запуститься вашему сервису, если сервис, от которого он зависит не работает
After - после чего ваш сервис должен запуститься. Везде, где указываем названия сервисов перечисление идет через пробел
Restart - сценарий рестарта сервиса, в данном случае, если ошибка программы
RestartSec - сколько ждать перед перезапуском
Остальное должно быть логически понятно и основное же это запуск самой вашей программы - ExecStart. Тут мы пишем команду для запуска 😎

Директив у systemd для гибкой настройки еще много, найти не проблема, основные же выше)

А вот например зависимый от нашего сервера другой сервис another.service:
[Unit]
Description=another some service
After=my_server.service
PartOf=my_server.service
PropagatesReloadFrom=my_server.service

[Service]
EnvironmentFile=/etc/environment
User=my_user
Group=my_user
ExecStart=/opt/some_code.sh

[Install]
WantedBy=multi-user.target

Запускается только после нашего основного сервиса, является его составной частью и перезапускается вместе с ним

2. Кидаем эти файлы *.service в /usr/lib/systemd/system/

3. systemctl daemon-reload перезагружаем все сервисы в systemd

4. systemctl enable my_server.service и systemctl enable another.service включаем наши сервисы

5. systemctl restart my_server.service и systemctl restart another.service запускаем наши сервисы

Теперь наша программа будет запускаться вместе с ОС (linux like), перезапускаться на ошибках и зависеть в правильном порядке между своими процессами 😍
  • 🔥 7
  • 👏 2
  • 🤯 1
More from @sibdevjun
  1. Sep 29, 2026😱 Взломали Пентагон? Я думал это просто мем, а такое реально бывает... Хакеры получили до…
  2. Sep 25, 2026⚠️ Не ждем, а готовимся? Сподвигнет ли это в правильное развитие регионов? Хз Добавит ли р…
  3. Sep 23, 2026Я не пропал, я на своей шкуре проверяю рыночек IT труда 😋
  4. Sep 16, 2026Post #585
  5. Sep 13, 2026Кстати, с днем программиста! Вайбкодеры, тоже подходите, наливайте 🥹
  6. Sep 13, 2026Post #583
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 →