Как настроить автоматический запуск python программы, использующей виртуальное окружение, в фоновом режиме на Linux?

Как внедрить скрипт на Python в автозагрузку на Linux с использованием виртуального окружения?
  • 1 ноября 2023 г. 10:58
Ответы на вопрос 2
Для автоматического запуска Python программы, использующей виртуальное окружение, в фоновом режиме на Linux вы можете использовать systemd.

1. Создайте файл с расширением ".service" в директории "/etc/systemd/system". Например, "my_script.service".

2. Откройте файл для редактирования и добавьте следующий код:

```
[Unit]
Description=My Python Script
After=network.target

[Service]
ExecStart=/путь_к_вашему_виртуальному_окружению/bin/python /путь_к_вашему_скрипту.py
WorkingDirectory=/путь_к_вашему_рабочему_каталогу
User=ваш_пользователь
Group=ваша_группа
Restart=always

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

Замените "/путь_к_вашему_виртуальному_окружению" на путь к вашему виртуальному окружению, "/путь_к_вашему_скрипту.py" на путь к вашему скрипту Python, "/путь_к_вашему_рабочему_каталогу" на путь к вашему рабочему каталогу, "ваш_пользователь" на вашего пользователя и "ваша_группа" на вашу группу.

3. Сохраните и закройте файл.

4. Запустите следующую команду, чтобы systemd обнаружил изменения и добавил наш сервис в список доступных сервисов:

```
sudo systemctl daemon-reload
```

5. Затем выполните следующую команду, чтобы включить автозапуск сервиса:

```
sudo systemctl enable my_script.service
```

6. Теперь вы можете запустить сервис следующей командой:

```
sudo systemctl start my_script.service
```

Ваш скрипт на Python начнет работать в фоновом режиме.

Замечание: убедитесь, что исполняемый файл виртуального окружения находится по пути "/путь_к_вашему_виртуальному_окружению/bin/python". Если путь отличается, измените его в настройках сервиса.
[Unit]
Description=My Script Service
After=multi-user.target

[Service]
User=user  # Имя пользователя, от имени которого будет запускаться команда, указанная в ExecStart
WorkingDirectory=/home/user/program  # Директория перед запуском
ExecStart=/home/user/program/venv/bin/python /home/user/program/webui.py
Restart=always  # Всегда перезапускать скрипт при падениях

[Install]
WantedBy=multi-user.target

Сохраните unit-файл в директории /etc/systemd/system с расширением .service, например, /etc/systemd/system/my_program.service. В этом примере нет использования скрипта activate для активации виртуального окружения. Вместо этого указывается полный путь к интерпретатору Python внутри виртуального окружения. Важно указывать абсолютные пути к файлам и директориям, даже если задана рабочая директория WorkingDirectory. Если ваш скрипт требует сетевое соединение, измените After в секции Unit на network-online.target вместо multi-user.target.
Похожие вопросы