设为首页 收藏本站
查看: 1319|回复: 0

[经验分享] Python-windows服务-重启自动化

[复制链接]

尚未签到

发表于 2015-4-20 11:07:22 | 显示全部楼层 |阅读模式
  
  一. 前言
  有了上一篇的“python初学”的基础,咱们就有了python的开发包,有了开发环境IDE,那我们就可以干活了。我的第一个选题就是让我们的windows服务可以按照我们的意愿进行自动重启。
  再说一下现在面临的问题吧,我们公司的平台服务是是基于windows服务开发,那如果我想做更新时,就要有如下的步骤:
  1. 停止正在运行的win服务。
  2. 复制指定文件夹下的DLL,粘贴到目标路径。
  3. 删除日志(便于查看启动日志,当然删不删由你)
  4. 重启服务。
  步骤很简单,不过如果每次都这样进行手工操作的话,那是不是有点笨拙了呢,用咱们软件开发原则的话说:don't repeat yourself。
  不过我也是新手,有不对的地方,还请大家指教啊,那我们现在就开始:
  二.新建项目
  找了半天,没有找到新建项目的快捷键,不过可以使用alt+F,再加下箭头回车,一样可以,当然也可以自定义shortkey.我只装了一个python3.3,python可以同时允许我们安装多个版本的python,具体项目选择哪个,可以在这里选择。回车,项目就创建完了。

  三. 新建python文件
  快捷键:alt+insert 允许我们新建一个Directory,Python Package,但咱这个没那么大,一个python File 就足够了。

  至于名字我也不纠结了,还是与项目名一样吧,
  后面那个__autthor是IDE给我自动生成的,你可以配置一下,让它自动给生成什么,位置见下图:

  我看到很多人都在这里设置了字符编码,不过目前我还没有遇到过相关的问题,以后再说吧。
  
  四。开始coding
  在正式coding之前,我们先前分析一下,这个程序的运行过程:
  1. 判断一下,要拷贝的文件是否存在,不存在就什么都不用做了。
  2. 判断指定服务是否正在运行。(如果没有运行,还就简单了),如果运行,那就停掉它。
  3. 判断一下,日志文件是否存在,如存在,就删除它。
  4. copy DLL 文件到指定目录。
  5. 启动服务。
  
  好了,思路有了,开始编码吧,直接上代码:
  1. 判断一下,要拷贝的文件是否存在,不存在就什么都不用做了。初学python的要注意缩进,python是用缩进划定方法,类,甚至是if,else的作用域的。



import os
src = "C:\\CTIL\\dblogic\\dbLogic.dll"
if not os.path.exists(src):
exit()

  2. 判断指定服务是否正在运行。(如果没有运行,还就简单了),如果运行,那就停掉它。
  这里我定义一个方法,主程序直接调用它就行了。这里插一句,好像写python的人变量和方法,文件名,都习惯用小写。



def stopservice(name):
result = os.popen("sc query %s" % name).read()
if "RUNNING" in result:
logger.info("The Service %s is running........" % name)
os.popen("sc stop %s" % name).read()
logger.info("Stop Service ........")
time.sleep(60)
elif "START_PENDING" in result:
logger.info("The Service  %s is starting........" % name)
time.sleep(10)
os.popen("sc stop %s" % name).read()
logger.info("Stop Service ........")
time.sleep(10)
elif "STOP_PENDING" in result:
logger.info("The Service  %s is stopping........" % name)
time.sleep(10)
elif "STOPPED" in result:
logger.info("The Service  %s stopped........" % name)
else:
logger.info("The Service %s is in other status........" % name)
  这里写的有点啰嗦,主要是写告诉大家,服务运行过程可能有多个状态,咱们最好还是考虑全一些。这里呢,我加了日志记录功能,以后有机会再和大家分享关于python日志方面的东东,这里还有一个方法,time.sleep(10),聪明的你一定知道它是什么意思了,这里不多说了。
  
  3. 判断一下,日志文件是否存在,如存在,就删除它。直接上方法



def deleteFile(filepath):
if os.path.isfile(filepath):
try:
os.remove(filepath)
except:
print("delete File failure: %s" % filepath)
elif os.path.isdir(filepath):
for item in os.listdir(filepath):
itemsrc = os.path.join(filepath, item)
deleteFile(itemsrc)
try:
os.rmdir(filepath)
except:
print("delete Folder failure: %s" % filepath)
  
  这里有点小说明,就是这个deletefile方法的接收参数既可以是文件,也可以是文件夹,删除呢也是采用两种方式。还里还有一个小的异常处理,有点小特别吧。
  
  4. copy DLL 文件到指定目录。
  这个也是比较简单:



shutil.copyfile(src, target)
  
  5. 启动服务。



def startservice(name):
logger.info("The Service %s is starting....... "  % name)
os.popen("sc start %s" % name).read()
time.sleep(60)
result = os.popen("sc query %s" % name).read()
if "RUNNING" in result:
logger.info("The Service started Succesivlly")
  
  五. 部署
  代码写完了,调试几个,就可以运行了,那么如何把它放在服务器上运行呢,一开始我想是不是也要打个包什么的呢,也找了些工具,不过后来,我想这么小的东西,还是直接放上去得了,大不了安装一下python。
  
  六. 结语
  我的第一个Python项目就完成了,没有把完整代码发出来,是想让大家都亲手都实践一下。
  欢迎大家讨论。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-58745-1-1.html 上篇帖子: 《Python基础教程》学习笔记 – Lesson01:基础知识 下篇帖子: VS2013中Python学习笔记[Django Web的第一个网页]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表