А есть ли готовый SystemD unit для службы?

7 years 8 months ago - 7 years 8 months ago #645 by ll23
ll23 replied the topic: А есть ли готовый SystemD unit для службы?
Как я и предположил ранее, после внесения изменений в процесс демонизации sopdsd.py все стало нормально работать при запуске юнитом systemd. Для этого надо убрать первый форк и отвязку от родительского окружения. По быстрому делаем так:***
В файле sopdsd.py удаляем все строки между
"""
        Deamonize, do double-fork magic.
        """
и
# Do second fork (SCAN DAEMON)

Создаем /etc/systemd/system/sopds.service в котором:
[Unit]
Description=Simple OPDS
After=network.target
Requires=mysql.service

[Service]
User=ИМЯ_ПОЛЬЗОВАТЕЛЯ_ОТ_КОТОРОГО_СТАРТУЕТ_ДЕМОН
ExecStart=/opt/sopds/py/sopdsd.py start
Type=forking
PIDFile=/tmp/sopds-http.pid
ExecStop=/opt/sopds/py/sopdsd.py stop
RestartSec=300
Restart=always

[Install]
WantedBy=multi-user.target

Если sopds будет убит любым способом кроме systemctl stop sopds, то через время в секундах, заданное в RestartSec, он будет перезапущен. Для проверки можно убить его:
systemctl kill -s HUP --kill-who=main sopds.service
, посмотреть статус сразу после этого и еще раз по прошествии RestartSec.

*** По хорошему, надо просить mitshel добавить возможность запуска sopdsd.py со специальным ключом, который позволит пропустить эту часть кода. Мои познания в питоне равны 0 и я это сделать не могу.

Наслаждаемся неубиваемым sopds!

PS Еще хочу разобраться как запускать unit в пространстве очень ограниченной file system namespace, чтобы видимый из интернета демон не мог вообще ничего сделать с остальной системой. Пока ограничил его запуском от пользователя без шелла (/bin/false).
Last Edit: 7 years 8 months ago by ll23.

Please Войти or Create an account to join the conversation.

  • ll23
  • ll23's Avatar
  • Offline
  • Новый участник
  • Новый участник
More
Time to create page: 0.094 seconds