Для правильного перезапуска 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, предоставляют надежный механизм для управления процессами и обеспечения их автоматического перезапуска. Выбор между ними зависит от ваших предпочтений и требований вашей системы.