Как написать свой systemd unit-файл и забыть про ручной запуск скриптов
Пару лет назад я сидел ночью в офисе и перезапускал вручную скрипт для обработки логов. Он падал каждые два часа. Я устал.
Предыстория
У нас был клиентский проект — парсер данных для интернет-магазина. Разработчик написал скрипт на Python, залил на сервер, сказал: «Запусти и забудь».
Я запустил через nohup. Через три часа процесс умер. Никто не заметил. Магазин потерял обновления цен.
Проблема
Скрипты, запущенные вручную, не перезапускаются после сбоя. Они не логируются в системный журнал. Их нельзя стартовать при загрузке системы.
Это приводит к даунтайму. Пока ты спишь — сервис молчит. Клиенты получают устаревшие данные.
Любой скрипт, который работает дольше пяти минут, должен быть оформлен как systemd unit.
Почему это важно
Для бизнеса простой сервиса — прямые убытки. Если парсер цен упал на час, товары не обновляются. Пользователи уходят к конкурентам.
Ручной контроль масштабируется плохо. Когда сервисов десять, а не один, следить глазами за каждым процессом невозможно.
Решение
Я разобрался со структурой systemd unit-файла. Вот как это выглядит на практике.
Сам unit-файл лежит в /etc/systemd/system/ с расширением .service. Внутри три основных секции: [Unit] — описание и зависимости, [Service] — как запускать, [Install] — когда включать.
Вот минимальный пример для скрипта на Python:
- 📄 [Unit] — Description=My parser, After=network.target
- ⚙️ [Service] — Type=simple, ExecStart=/usr/bin/python3 /opt/parser/main.py, Restart=on-failure
- 🔗 [Install] — WantedBy=multi-user.target
После создания файла выполняешь systemctl daemon-reload, а потом systemctl enable my-parser.service и systemctl start my-parser.service.
Теперь скрипт стартует при загрузке. Если упадет — systemd перезапустит его автоматически. Все сообщения идут в journalctl.
Результат
Тот парсер цен работает до сих пор без вмешательства. Я просто добавил ещё три похожих сервиса для других клиентов.
Забыл про nohup. Забыл про ps aux и поиск PID. systemd делает всё сам.
📬 Свяжитесь с нами
Хотите внедрить это в своем бизнесе? Пишите нам!
- 📧 Email: [email protected]
- 🌐 Сайт: 1it.pro
- 📝 Блог: blog.1it.pro
- ✈️ Telegram Global (EN): Admin_global
- ✈️ Telegram (RU): Admin