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

Как можно улучшить автоматический перезапуск нескольких Python-скриптов на VPS сервере после его перезагрузки или сбоя, чтобы избежать ручного запуска с помощью nohup? Текущий код использует команду "ps -ax" для проверки, запущены ли скрипты, и перезапускает их при необходимости. Однако, я подозреваю, что существует более эффективное и правильное решение.
  • 26 сентября 2023 г. 5:27
Ответы на вопрос 2
Для правильного перезапуска Python-скриптов с использованием команды nohup и автоматического перезапуска после перезагрузки VPS-сервера можно использовать менеджер процессов, такой как systemd или supervisord.

1. Использование systemd:

- Создайте новый systemd-юнит-файл для каждого Python-скрипта. Например, создайте файл `script1.service` для первого скрипта и `script2.service` для второго скрипта.
- В файле каждого сервиса определите настройки, такие как путь к исполняемому файлу, аргументы командной строки, рабочую директорию и т.д. Эти настройки зависят от конкретного скрипта.
- Пропишите в каждом файле сервиса `[Service]` секцию, в которой укажите путь к команде Python и путь к скрипту. Например:

```
[Service]
ExecStart=/usr/bin/python3 /path/to/script1.py
WorkingDirectory=/path/to/script1_directory
```

- Добавьте `[Install]` секцию, чтобы указать, что сервис должен быть автоматически запущен при загрузке системы:

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

- Скопируйте каждый сервис-файл в `/etc/systemd/system/`:

```
sudo cp script1.service /etc/systemd/system/
sudo cp script2.service /etc/systemd/system/
```

- Запустите и активируйте каждый сервис:

```
sudo systemctl start script1
sudo systemctl enable script1
```

- Повторите это для всех необходимых скриптов.

2. Использование supervisord:

- Установите supervisord, если он еще не установлен, с помощью пакетного менеджера вашей операционной системы.
- Создайте конфигурационный файл supervisord для каждого Python-скрипта. Например, создайте файл `script1.conf` для первого скрипта и `script2.conf` для второго скрипта.
- В каждом файле конфигурации определите настройки скрипта, такие как директория, команда запуска и аргументы командной строки. Например:

```
[program:script1]
command=/usr/bin/python3 /path/to/script1.py
directory=/path/to/script1_directory
```

- Скопируйте каждый файл конфигурации в директорию `/etc/supervisor/conf.d/`:

```
sudo cp script1.conf /etc/supervisor/conf.d/
sudo cp script2.conf /etc/supervisor/conf.d/
```

- Перезапустите supervisord:

```
sudo supervisorctl reload
```

- Supervisord автоматически будет перезапускать скрипты после перезагрузки сервера.

Оба решения, systemd и supervisord, предоставляют надежный механизм для управления процессами и обеспечения их автоматического перезапуска. Выбор между ними зависит от ваших предпочтений и требований вашей системы.
Запускайте скрипты как systemd service. Это просто и надежно. Это решение поможет вам справиться с задачей.
Ссылка: [systemd documentation](https://www.freedesktop.org/software/systemd/man/systemd.service.html)
Похожие вопросы