分享下脚本注册成为win服务

这个借鉴了其他大佬得 具体是谁忘记了有机会推荐 今天也是找了之前得改出来得

首先安装三个模块 最后一个是定时任务如果不需要可以不装

pip install psutil
pip install pywin32
pip install apscheduler
下面贴代码
import os
import sys
import random
import socket import time import psutil
import servicemanager
import win32con
import win32event
import win32process
import win32security
import win32service
import win32serviceutil
import win32timezone
from apscheduler.schedulers.background import BackgroundScheduler sys.stdout = sys.stderr = open(os.devnull,'w')
class SpiderService(win32serviceutil.ServiceFramework): # 注册服务名
_svc_name_ = 'PS'
# 服务在windows系统中显示的名称
_svc_display_name_ = 'Python Service'
# 服务描述
_svc_description_ = 'Python Service Description' @classmethod
def parse_command_line(cls):
'''
ClassMethod 解析命令行
'''
win32serviceutil.HandleCommandLine(cls) def __init__(self, args):
'''
winservice的构造函数
'''
self.scheduler = BackgroundScheduler()
win32serviceutil.ServiceFramework.__init__(self, args)
self.stop_event = win32event.CreateEvent(None, 0, 0, None)
socket.setdefaulttimeout(60) def SvcStop(self):
'''
当服务被要求停止时调用
'''
self.stop()
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.stop_event)
self.ReportServiceStatus(win32service.SERVICE_STOPPED)
self.run = False def SvcDoRun(self):
'''
当服务被要求启动时调用
'''
self.start()
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_, '')) try:
username = 'admin'
password = 'admin'
domain = ''
token = win32security.LogonUser(
username,
domain,
password,
win32con.LOGON32_LOGON_SERVICE,
win32con.LOGON32_PROVIDER_DEFAULT
)
win32security.ImpersonateLoggedOnUser(token) cmd = '<a command line programe>'
cwd = '<a work dir>'
env = os.environ
priority = win32con.NORMAL_PRIORITY_CLASS
startup = win32process.STARTUPINFO() (hProcess, hThread, dwProcessId, dwThreadId) = \
win32process.CreateProcessAsUser(token, None, cmd, None, None, True, priority, env, cwd, startup) process = psutil.Process(dwProcessId)
return_code = process.wait()
print('return code: %s' % str(return_code)) except win32security.error as e:
print(e) self.main() win32event.WaitForSingleObject(self.stop_event, win32event.INFINITE)
#这个如果你是后台启动得flask 后台服务要加上
while True:
time.sleep(10) def __schedule(self):
#添加定时任务
self.scheduler.add_job(
self.ceshi,
'interval',
seconds=10
)
#定时任务
def ceshi(self):
while self.isrunning:
random.seed()
x = random.randint(1, 1000000)
Path(f'c:\\{x}.txt').touch()
time.sleep(5) def start(self):
self.isrunning = True def stop(self):
self.isrunning = False def main(self):
self.__schedule()
self.scheduler.start() if __name__ == '__main__':
if len(sys.argv) == 1:
try:
event_src_dll = os.path.abspath(servicemanager.__file__)
#这里需要注意 他里边得参数要是你得类名SpiderService 下边同样得
servicemanager.PrepareToHostSingle(SpiderService)
servicemanager.Initialize('SpiderService', event_src_dll)
servicemanager.StartServiceCtrlDispatcher()
except win32service.error as details:
if details == winerror.ERROR_FAILED_SERVICE_CONTROLLER_CONNECT:
win32serviceutil.usage()
else:
win32serviceutil.HandleCommandLine(SpiderService)

命令 更多得可以搜一下 install 之后会安装到服务里边但是并没有开启
python xxx.py install
python xxx.py start
python xxx.py stop
python xxx.py remove

打包 我这边用得是pyinstaller
pyinstaller -F -w xxx.py
#打包完成后 命令是:(与之前得差不多)
xxx.exe install
xxx.exe start
...

python 脚本或者flask 注册成为windows服务的更多相关文章

  1. 把NodeJS注册成Windows服务

    为了让NodeJS开发的网站能在服务器端正常运行,最好把NodeJS需要运行的代码注册成Windows服务,服务器如果重启也不需要重新去启动NodeJS. 1.编写一个执行NodeJS脚本的bat文件 ...

  2. Postgresql数据库部署之:Postgresql本机启动和Postgresql注册成windows 服务

    1.初始化并创建数据库(一次即可)  initdb \data --locale=chs -U postgres -W  You can now start the database server u ...

  3. 把应用程序exe 注册成为windows 服务的方法

    由于在Windows 服务器上必须要启动一个软件,提供外网访问内网的客户端软件,但是由于每次远程服务器之后会注销当前用户,所以客户端软件就会自动退出,那么我在外网的系统就不能支持访问了. 解决方案:将 ...

  4. 将TIBCO Host 实例注册为Windows服务

    安装了TIBCO ActiveMatrix BPM及成功创建了ActiveMatrix Administrator 和 BPM Server后,每次都要手动启动tibcohost,比较麻烦,实际上TI ...

  5. 使用wrapper将java程序注册程windows服务后不生效

    使用wrapper将java程序注册程windows服务后不生效 使用add.bat或test***.bat测试通过了, 然后使用install***.bat注册后cmd显示注册成功. 但是程序到了运 ...

  6. Nginx的使用(三)把nginx和php-cgi.exe注册成windows服务

    1.创建windows服务用到一个小工具WinSW:https://github.com/kohsuke/winsw/releases(下载 .exe 文件即可,根据系统选择,Win 10 选择 .N ...

  7. .net下将exe改造为既能双击独立运行又能注册为windows服务

    最近项目中需要将一些业务的处理程序改造为windows服务,但是考虑到实际需求,也需要能够直接双击运行这些处理程序.首先第一步想到的就是原来的项目不变,只需要在加一个windows服务的项目就行.但是 ...

  8. Windows 下tomcat安装及将多个tomcat注册为Windows服务

    一.应用场景 虽然Windows在当下已经不再是我们作为服务器操作系统平台的首选,但是还是有一些开发商或者项目整体需求的限制必须运行在Windows系统平台之下.为了避免多个应用部署在同一个tomca ...

  9. 使用NSSM把任意exe程序注册成Windows服务

    1.登录NSSM官网下载最新版本: http://www.nssm.cc/download 2.解压之后可以看到win32和win64位的nssm.exe,根据自己的电脑选择使用 3.拷贝一份nssm ...

随机推荐

  1. oracle 以SYSDBA远程连接数据库

    在服务器用sysdba登陆 grant sysdba to system 然后在远程就可以sysdba登陆数据库了

  2. Hibernate持久化标志符生成策略

    generator子元素定义持久化标识符的生成策略,为持久化类对应的数据库表的主键找到了赋值方法,HIbernate默认将使用assigned的持久化标识符生成策略.关系型数据库的主键定义方式:(1) ...

  3. Linux学习 - IP地址配置

    1 首先选择桥接模式 2 配置IP.子网掩码.网关.DNS setup 本例中使用的是无线网连接, IP地址:  192.168.3.195 子网掩码:  255.255.255.0 网关: 192. ...

  4. 一个简单的Extjs继承实现

    function extend(sub,sup){ //目地:实现只继承父类的原型对象 //1.用一个空函数据中转,目地进行中转 var F = new Function(); //2.实现空函数的的 ...

  5. 使用jstl和el表达式来展示request域中存放的user对象的信息

    <%@ page import="java.util.ArrayList" %><%@ page import="java.util.List" ...

  6. 使用plantuml,业务交接就是这么简单

    使用plantuml,业务交接就是这么简单 你好,我是轩脉刃. 最近交接了一个业务,原本还是有挺复杂的业务逻辑的,但发现交接过来的项目大有文章,在项目代码中有一个docs文件夹,里面躺着若干个 pum ...

  7. jdk1.8安装教程

    JDK1.8安装包下载 链接:https://pan.baidu.com/s/18pEMo3gYsAAHWC9DjizP1A 提取码:xu99 1.双击JDK1.8的安装包,并点击下一步 2.选择安装 ...

  8. Python基础入门(6)- 面向对象编程

    1.初识面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本篇随笔将详细介绍Python的面向对象编程. 如果你以前没有接触过面向对象 ...

  9. java 编程基础 反射方式获取泛型的类型Fileld.getGenericType() 或Method.getGenericParameterTypes(); (ParameterizedType) ;getActualTypeArguments()

    引言 自从JDK5以后,Java Class类增加了泛型功能,从而允许使用泛型来限制Class类,例如,String.class的类型实际上是 Class 如果 Class 对应的类暂时未知,则使 C ...

  10. Do PDB Files Affect Performance?

    After a detour into Historical Debugging, it's time to come back to return to answering questions ab ...