python 脚本或者flask 注册成为windows服务
分享下脚本注册成为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服务的更多相关文章
- 把NodeJS注册成Windows服务
为了让NodeJS开发的网站能在服务器端正常运行,最好把NodeJS需要运行的代码注册成Windows服务,服务器如果重启也不需要重新去启动NodeJS. 1.编写一个执行NodeJS脚本的bat文件 ...
- Postgresql数据库部署之:Postgresql本机启动和Postgresql注册成windows 服务
1.初始化并创建数据库(一次即可) initdb \data --locale=chs -U postgres -W You can now start the database server u ...
- 把应用程序exe 注册成为windows 服务的方法
由于在Windows 服务器上必须要启动一个软件,提供外网访问内网的客户端软件,但是由于每次远程服务器之后会注销当前用户,所以客户端软件就会自动退出,那么我在外网的系统就不能支持访问了. 解决方案:将 ...
- 将TIBCO Host 实例注册为Windows服务
安装了TIBCO ActiveMatrix BPM及成功创建了ActiveMatrix Administrator 和 BPM Server后,每次都要手动启动tibcohost,比较麻烦,实际上TI ...
- 使用wrapper将java程序注册程windows服务后不生效
使用wrapper将java程序注册程windows服务后不生效 使用add.bat或test***.bat测试通过了, 然后使用install***.bat注册后cmd显示注册成功. 但是程序到了运 ...
- Nginx的使用(三)把nginx和php-cgi.exe注册成windows服务
1.创建windows服务用到一个小工具WinSW:https://github.com/kohsuke/winsw/releases(下载 .exe 文件即可,根据系统选择,Win 10 选择 .N ...
- .net下将exe改造为既能双击独立运行又能注册为windows服务
最近项目中需要将一些业务的处理程序改造为windows服务,但是考虑到实际需求,也需要能够直接双击运行这些处理程序.首先第一步想到的就是原来的项目不变,只需要在加一个windows服务的项目就行.但是 ...
- Windows 下tomcat安装及将多个tomcat注册为Windows服务
一.应用场景 虽然Windows在当下已经不再是我们作为服务器操作系统平台的首选,但是还是有一些开发商或者项目整体需求的限制必须运行在Windows系统平台之下.为了避免多个应用部署在同一个tomca ...
- 使用NSSM把任意exe程序注册成Windows服务
1.登录NSSM官网下载最新版本: http://www.nssm.cc/download 2.解压之后可以看到win32和win64位的nssm.exe,根据自己的电脑选择使用 3.拷贝一份nssm ...
随机推荐
- App内容分享
1.发送文本内容 发送简单的数据到其他应用,比如社交分分享的内容,意图允许用户快速而方便的共享信息. //分享简单的文本内容 public void btnShareText(View view) { ...
- 京东消息中间件JMQ(转)
http://blog.csdn.net/javahongxi/article/details/54411464 [京东技术]京东的MQ经历了JQ->AMQ->JMQ的发展,其中JQ的基于 ...
- shell脚本 用户登录服务器发送钉钉提醒
一.企业微信配置 1.获取AgentId(AppID).Secret .CropID.部门ID 创建一个企业微信应用获取到AgentId(AppID).Secret 2.获取CropID,点击 &qu ...
- 追踪工具strace
目录 一.简介 二.例子 找出程序读取的文件 查看现在程序在做什么 查看程序中哪个部分消耗大量cpu 无法连接服务器查看信息 一.简介 Linux 操作系统有很多用来跟踪程序行为的工具,内核态的函数调 ...
- 选择…Select…(Power Query 之 M 语言)
选择行: 筛选Table.SelectRows-文本与数值 筛选Table.SelectRows-日期与时间 保留错误行:= Table.SelectRowsWithErrors( 表, {" ...
- Table.Distinct取唯/众数….Distinct/Mode/判断…IsDistinct(Power Query 之 M 语言)
数据源: "姓名""基数""个人比例""个人缴纳""公司比例""公司缴纳"&qu ...
- java 多线程 Thread.join子线程结束父线程再运行;join(long):等待超时毫秒数
Join的使用 目的:当子线程运行结束后,父线程才能再继续运行 /** * @ClassName ThreadJoinExample * @projectName: object1 * @author ...
- java 数据类型:Stream流 对象转换为集合collect(Collectors.toList()) ;常用方法count,limit,skip,concat,max,min
集合对象.stream() 获取流对象,对元素批处理(不改变原集合) 集合元素循环除了用for循环取出,还有更优雅的方式.forEach 示例List集合获取Stream对象进行元素批处理 impor ...
- ligerUI问题
1.checkboxColWidth:990,Grid的复选框的宽度设置为什么不起作用. 2.当grid出现横线不对齐时,可以设置detailColWidth:90,属性进行设置.此属性好像只是针对复 ...
- Xftp设置指定记事本(notepad++)打开文件
右键