这篇文章上次修改于 499 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

上一篇文章是go程序,这篇说一下python来管理这个go程序

使用go build 命令,可以生成一个可执行文件,我这里生成的课执行文件为 :ansyTask

主要有2个文件:

  • config.json -- 配置文件
  • awctls.py -- ansyTask的控制文件

先看config.json 配置文件


{ "uri" : "redis://localhost:6379/", //redis uri "queues": "900sui:ansyTaskQueue", //要监听的队列的key "connections" : 10, //redis最大的连接数 "concurrency" : 5, //并行数 "namespace" : "kcResque:", //redis的可以所在的命名空间 "interval" : 3, //轮询间隔 我这里是每3秒去取一次队列里面的任务数据 "pid" : "/var/log/ansyTask/dange/pid/ansyTask.pid", //pid 保存的文件 "log" : "/var/log/ansyTask/dange/logs/dange.log" //log日志保存的文件 }

 

在看awctls.py 程序


#!/usr/bin/python # -*- coding: UTF-8 -*- import json,os,sys,signal, time argLen = len(sys.argv) if argLen < 2: print "arg start|restart|stop need one" sys.exit(0) #退出程序 #检查进程是否存在 def check_pid(pid): """ Check For the existence of a unix pid. """ try: os.kill(pid, 0) except OSError: return False else: return True #启动 def ansyStart(): print "ansyTask start..." dir = os.getcwd() awConf = readConfig() if os.path.exists(awConf['pid']): with open(awConf['pid']) as f: pid = f.read() if pid != "": if check_pid( int(pid) ): print pid + " server has runing; continued" return True cmd = u'%s/ansyTask -queues=%s -uri=%s -connections=%s -concurrency=%s -namespace=%s -interval=%s -use-number=true -exit-on-complete=false -pid=%s -log=%s & '%(dir,awConf['queues'],awConf['uri'],awConf['connections'],awConf['concurrency'],awConf['namespace'],awConf['interval'],awConf['pid'], awConf['log']) print "Run :" + cmd print os.system(cmd) #停止 def ansyStop(): print "ansyTask stoping..." awConf = readConfig() if os.path.exists(awConf['pid']) == False : print "not find pid file:"+awConf['pid'] return False with open(awConf['pid']) as f: pid = f.read() if check_pid( int(pid) ): try: print os.kill(int(pid),signal.SIGQUIT) print "stop success" except OSError,e: print e.message else: print pid + "server is not run" #读取配置文件 def readConfig(): dir = os.getcwd() filePath = dir + "/config.json" with open(filePath) as f: awConf = json.loads( f.read() ) return awConf #接收命令行参数,做出相应的动作 if sys.argv[1] == 'start': ansyStart() elif sys.argv[1] == 'stop': ansyStop() elif sys.argv[1] == 'restart': ansyStop() time.sleep(2) ansyStart()

 

 

将 ansyTask,config.json, awctls.py 同时放在一个文件夹下面

执行以下命令来控制

 


./awctls.py start #启动 ./awctls.py stop #停止 ./awctls.py restart #重启

 

 源代码可在github上查看

github地址:https://github.com/wyz9527/ansyWorker