Почему systemd не может найти пакет telebot?

Как на Ubuntu создать службу systemd для запуска Telegram бота, который использует модуль telebot, чтобы избежать проблемы с невозможностью обнаружить модуль telebot при запуске службы?
Изображение к вопросу
  • 13 января 2024 г. 7:08
Ответы на вопрос 2
Systemd сам по себе не занимается поиском пакетов. Если systemd не может найти модуль Python `telebot`, скорее всего, это связано с тем, что приложение или скрипт запускается не в том окружении Python, в котором установлен данный модуль.

Чтобы решить эту проблему, вы можете создать службу systemd, которая будет использовать правильное виртуальное окружение Python или глобальный интерпретатор Python, в котором установлен модуль `telebot`. Вот пример шагов, которые можно выполнить для создания такой службы:

1. Установите модуль `telebot`. Если вы еще не установили его, вы можете сделать это с помощью pip (пакетного менеджера для Python):

   ```sh
   pip install pyTelegramBotAPI
   ```

   Если вы используете виртуальное окружение для вашего Telegram бота, активируйте его перед установкой:

   ```sh
   source /path/to/your/venv/bin/activate
   pip install pyTelegramBotAPI
   ```

2. Создайте файл службы systemd. Откройте текстовый редактор для создания нового файла `your-telegram-bot.service` в `/etc/systemd/system/`:

   ```sh
   sudo nano /etc/systemd/system/your-telegram-bot.service
   ```

   Добавьте следующее содержимое в файл, меняя пути и настройки на соответствующие вашему окружению:

   ```ini
   [Unit]
   Description=Telegram Bot Service
   After=network.target

   [Service]
   Type=simple
   User=youruser
   WorkingDirectory=/path/to/your/bot
   ExecStart=/path/to/your/venv/bin/python bot_script.py
   Restart=on-failure

   [Install]
   WantedBy=multi-user.target
   ```

   В данной конфигурации `/path/to/your/venv/bin/python` должен быть путем к исполняемому файлу Python внутри вашего виртуального окружения, а `bot_script.py` — это скрипт вашего Telegram бота.

3. Перезагрузите системный демон, чтобы он узнал о новой службе:

   ```sh
   sudo systemctl daemon-reload
   ```

4. Включите вашу новую службу, чтобы она запускалась при старте системы:

   ```sh
   sudo systemctl enable your-telegram-bot
   ```

5. Запустите вашу новую службу:

   ```sh
   sudo systemctl start your-telegram-bot
   ```

6. Проверьте статус вашей службы, чтобы убедиться, что она работает корректно:

   ```sh
   sudo systemctl status your-telegram-bot
   ```

Если после выполнения этих шагов у вас все еще возникают проблемы с нахождением модуля `telebot`, убедитесь, что:

- Вы указали правильный путь к виртуальному окружению и скрипту вашего бота.
- Модуль `telebot` (или `pyTelegramBotAPI`) установлен в используемом виртуальном окружении или в глобальном Python окружении, если вы не используете виртуальное окружение.
- Пользователь, под которым запускается служба, имеет соответствующие разрешения на доступ к файлам и каталогам, необходимым для работы вашего бота.
потому что telebot установлен не в систему, а юзеру, пропиши в [Service] WorkingDirectory и User, так же стоит добавить Restart=always (ну или другое значение, если логика другая)
Похожие вопросы