В этом посте предполагается, что вы используете Linux. Если это не так, я все равно буду хранить этот ответ для всех остальных. Общие принципы будут применяться к любой ОС независимо.
Хотя setsid
- это один из способов поместить программу в фоновый режим, обычно это не то, что вам нужно по ряду причин:
- Если вы снова зайдете на сервер, нет простого способа увидеть результат работы программы. Любой вывод не будет сохранен.
- Если программа вылетает, она не будет перезапущена.
- Если сервер перезагрузится, он не запустится.
- Нет простого способа увидеть статус, остановить или перезапустить его.
Один немного лучший способ - использовать tmux
(или более старый screen
). Их можно использовать для отсоединения процесса, но все же иметь доступ к его выводу. ( см. Этот ответ ).
Однако, если вы хотите сделать все правильно, вам следует использовать диспетчер процессов / супервизор, такой как systemd или supervisord.
Для systemd вы можете создать следующий файл: /etc/systemd/system/yourprogramname.service
Внутри него поместите следующий текст:
[Unit]
Description=YourDescription
[Service]
ExecStart=/usr/bin/python3 /your/full/script/location.py
Restart=always
[Install]
WantedBy=multi-user.target
(Эти файлы поддерживают ряд дополнительных параметров, их можно просмотреть по адресу: http://0pointer.de/public/systemd-man/systemd.service.html)
Затем перезагрузите устройства с помощью systemctl daemon-reload
и включите ваше устройство при загрузке с помощью systemctl enable yourprogramname.service
.
Вы можете:
- Запустите это:
systemctl start yourprogramname
- Возврат:
systemctl restart yourprogramname
- Перестань:
systemctl stop yourprogramname
- Получить статус:
systemctl status yourprogramname
- Просмотр полных журналов:
journalctl -u yourprogramname
(все эти команды требуют sudo)