Win系统设置python程序为service的方法

2020年7月19日 / 13次阅读 / Last Modified 2020年7月24日
安装配置

公司要在公网的Win系统服务器上搭一个ftp server,我选择了使用pyftpdlib(看这篇文章说明选择的原因:用pyftpdlib搭建ftp服务器)。本文总结将一个python程序设置为Win系统的service的方法。

将python程序设置为service,目的是为了开机自启动这个后台进程!

使用sc程序,sc create 创建service,sc delete删除service,sc命令的具体使用,网络上资料很多了。只是有一个细节,我也不知道原因,sc命令参数的=号后面,要有一个空格。

sc create ftp_server binpath= "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\python.exe D:\ftp_server\start.py" displayname= "ftp_server" type= own depend= Tcpip start= auto

sc命令的binpath参数,使用绝对地址引用python的路径和py脚本的路径,这个引用的脚本,不是最终进程代码,而是import subprocess,然后用subprocess.Popen启动真正的进程。因此在这个py脚本内,subprocess.Popen调用中的路径也都是绝对路径。

import subprocess
subprocess.Popen('C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python38\\python.exe D:\\ftp_server\\PyFtpServer.py', shell=True)

我测试了很多不同的方案,最后就觉得这样是最好的。我也有点说不上来为什么这样就可以,跟Windows系统的机制有关系。同时,这样做也不是最完美的,这个service在系统中的状态是“已停止”。不过,效果OK。

状态已停止,但python进程在
状态已停止,但python进程在

有点记不清其它方案的细节和效果了,以后有机会在测试总结吧。Windows在这方面的机制与Linux差别很大。

----------问题分割线-----------

用本文的方法开机启动python程序,如果程序关闭了要再打开,想要没有cmd窗口出现,还是要在service管理界面点启动,不过这时会有一个错误出来,但是程序能够无窗口启动!错误如下:

启动python程序时的错误
启动python程序时的错误

应该是与windows系统没有正常交互导致的。

-- EOF --

本文链接:https://www.pynote.net/archives/2291

留言区

《Win系统设置python程序为service的方法》有1条留言

电子邮件地址不会被公开。 必填项已用*标注

  • 麦新杰

    sc命令参考:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/cc754599(v=ws.11) [回复]


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top