Запустите Python без заголовка на локальном сервере - PullRequest
0 голосов
/ 30 августа 2018

Итак, вот моя маленькая проблема:

У меня есть небольшая программа на Python, и я должен запускать ее 24/7 с доступом в Интернет. Поэтому использование моего ноутбука не является решением проблемы. Но я могу использовать локальный сервер. Моя программа сохранена на сервере. Есть ли способ запустить программу без сервера на сервере, чтобы она могла работать в течение длительного периода времени?

Спасибо

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

В этом посте предполагается, что вы используете 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)

0 голосов
/ 30 августа 2018

Используйте setsid для отключения программы:

setsid python myprog.py
...