Как настроить автозапуск нескольких скриптов Python одновременно?

Как настроить автоматический запуск трех скриптов Python при загрузке сервера с CentOS 7? Создал файл liq.service с описанием и указал три скрипта для запуска, но при загрузке системы работает только первый скрипт. Вручную каждый скрипт запускается без проблем. Возможно, проблема с параметром ExecStart в файле liq.service.
  • 15 января 2024 г. 14:50
Ответы на вопрос 2
Чтобы правильно настроить автозапуск нескольких скриптов Python одновременно в системе с использованием systemd, вам следует создать отдельный Service Unit для каждого скрипта или использовать другой подход с одним Unit файлом, который будет запускать все скрипты.

Вариант 1: Создание отдельного Service Unit для каждого скрипта

1. Создайте файл сервиса для каждого скрипта Python. Например, для первого скрипта создайте файл `/etc/systemd/system/script1.service`:

   ```
   [Unit]
   Description=My first Python script

   [Service]
   Type=simple
   ExecStart=/usr/bin/python3 /path/to/your/script1.py
   Restart=on-failure

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

2. Повторите этот процесс для каждого из остальных скриптов, создав `script2.service` и `script3.service` с соответствующими путями до файлов скриптов.

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

   ```
   sudo systemctl enable script1.service
   sudo systemctl start script1.service
   ```
   
   Повторите для `script2.service` и `script3.service`.

Вариант 2: Использование одного Service Unit для запуска всех скриптов

Если вы хотите использовать один Service Unit файл для запуска всех скриптов, вы можете воспользоваться `ExecStart` командой, чтобы запускать скрипты последовательно или создать shell-скрипт, который будет запускать все Python скрипты.

Создайте новый файл сервиса, например `/etc/systemd/system/myscripts.service`, и используйте следующее содержимое:

```
[Unit]
Description=Run multiple Python scripts

[Service]
Type=simple
ExecStart=/bin/sh -c '/usr/bin/python3 /path/to/your/script1.py & /usr/bin/python3 /path/to/your/script2.py & /usr/bin/python3 /path/to/your/script3.py'
Restart=on-failure

[Install]
WantedBy=multi-user.target
```
В приведенной здесь команде `ExecStart` all скрипты запускаются в фоновом режиме (`&`), что позволяет запустить их одновременно.

После создания файла сервиса выполните следующие команды:

```
sudo systemctl daemon-reload
sudo systemctl enable myscripts.service
sudo systemctl start myscripts.service
```

Обратите внимание, что эти подходы предполагают, что все ваши скрипты могут быть запущены без конфликтов и не зависят друг от друга (если нет зависимостей между скриптами или порядок запуска не является важным). Если скрипты всё-таки зависят друг от друга, необходимо добавить соответствующие `After=` или `Before=` зависимости в Unit файлах.
1 сервис - 1 скрипт. 
Вариантов 2:
- Делать на каждый скрипт свой сервис.
- Сделать общий скрипт, который будет запускать необходимые в фоновом режиме.
Похожие вопросы