这篇文章上次修改于 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
已有 3 条评论