在本地服务器上无头运行Python

时间:2018-08-30 08:49:47

标签: python server headless

所以,这是我的小问题:

我有一个小型python程序,必须通过Internet访问24/7运行。因此,使用笔记本电脑并不是真正的解决方案。但是我可以使用本地服务器。我的程序保存在服务器上。有没有办法在服务器上无头启动程序,因此它可以长时间运行?

谢谢

2 个答案:

答案 0 :(得分:0)

使用setsid分离程序:

setsid python myprog.py

答案 1 :(得分:0)

本文假定您使用的是Linux。如果不是这种情况,我仍然会为其他任何人保留这个答案。通用原则将适用于任何操作系统。

尽管setsid是将程序置于后台的一种方法,但是由于多种原因,通常它不是您想要的:

  • 如果再次SSH进入服务器,则没有简单的方法查看程序的输出。任何输出都不会保留。
  • 如果程序崩溃,将不会重新启动。
  • 如果服务器重新启动,它将无法启动。
  • 没有简单的方法可以查看状态,停止或重新启动状态。

一种更好的方法是使用tmux(或较旧的screen)。这些可以用来分离一个进程,但是仍然可以访问它的输出。 (see this answer)。

但是,如果您想正确执行操作,则应该使用流程管理器/主管,例如systemd或supervisor。

对于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)