Как сделать из своей программы службу, которая сама запускается вместе с сервером и перезапускается, если упала.
Содержание
Если на сервере работает ваша программа — бот, обработчик заданий, сайт на Node.js или Python, — оформите её службой. Тогда она сама запустится после перезагрузки сервера и сама поднимется, если упадёт. Старый способ — дописать команду в /etc/rc.local — в нынешних системах по умолчанию не работает.
Файл службы
Создайте файл /etc/systemd/system/mybot.service (вместо mybot — любое имя):
[Unit]
Description=Мой бот
After=network-online.target
Wants=network-online.target
[Service]
User=bot
WorkingDirectory=/opt/mybot
ExecStart=/usr/bin/python3 /opt/mybot/bot.py
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
- User — от чьего имени работает программа. Root ей обычно не нужен — заведите отдельного пользователя:
sudo useradd -r -s /usr/sbin/nologin bot. - ExecStart — команда запуска, с полными путями. Где лежит программа, подскажет
command -v python3— см. Где находится программа. - Restart=on-failure — перезапускать, если программа завершилась с ошибкой.
- Пароли и ключи не пишите прямо в файл службы — положите их в отдельный файл с правами 600 и подключите строкой
EnvironmentFile=/etc/mybot.env.
Запуск и проверка
sudo systemctl daemon-reload # перечитать файлы служб
sudo systemctl enable --now mybot # запустить и включить автозапуск
systemctl status mybot # работает ли
journalctl -u mybot -f # что программа пишет (выход — Ctrl+C)
Поправили файл службы — снова daemon-reload, затем sudo systemctl restart mybot.
Во FreeBSD
Проще всего — строка в crontab пользователя (crontab -e). Программа daemon из системы перезапустит её, если она упадёт:
@reboot /usr/sbin/daemon -r -o /var/log/mybot.log /usr/local/bin/python3 /opt/mybot/bot.py
