57 lines
2.2 KiB
Python
57 lines
2.2 KiB
Python
# -*- coding: utf-8 -*-
|
||
from application import app
|
||
import click
|
||
import sys
|
||
import traceback
|
||
|
||
'''
|
||
python flask runjob -m Test ( jobs/tasks/Test.py )
|
||
python flask runjob -m test/Index ( jobs/tasks/test/Index.py )
|
||
* name or flags - 名称或选项字符串列表, e.g. foo or -f, --foo.
|
||
* action - 参数如果定义了选项,表示这是一个操作参数,至于调用时做哪种操作由用户输入或者default决定。
|
||
* nargs - 应该使用的命令行参数数。.
|
||
* const - 某些动作或参数个数的常数值。.
|
||
* default - 如果命令行没有对输入这个参数相应的值,则此参数用default给出的值.
|
||
* type -将用户输入的值转化为哪种类型.
|
||
* choices - 参数可输入值的范围或选择.
|
||
* required - 命令行输入的值是否可以被忽略(布尔量).
|
||
* help - 参数的简要描述.
|
||
* metavar - useage中显示的参数的名称.
|
||
* dest - 要添加到解析参数返回的对象中的属性的名称.
|
||
'''
|
||
|
||
def register_runjob_command():
|
||
"""注册runjob命令到Flask CLI"""
|
||
@app.cli.command("runjob")
|
||
@click.option("-m", "--name", required=True, help="指定job名")
|
||
@click.option("-a", "--act", help="Job动作")
|
||
@click.option("-p", "--param", multiple=True, help="业务参数")
|
||
def runjob(name, act, param):
|
||
"""运行定时任务"""
|
||
ret_params = {
|
||
'name': name,
|
||
'act': act,
|
||
'param': list(param) if param else []
|
||
}
|
||
|
||
if not ret_params['name']:
|
||
tip_msg = '''
|
||
请正确调度Job
|
||
flask runjob -m Test ( jobs/tasks/Test.py )
|
||
flask runjob -m test/Index ( jobs/tasks/test/Index.py )
|
||
'''
|
||
app.logger.info(tip_msg)
|
||
click.echo(tip_msg)
|
||
return False
|
||
|
||
module_name = ret_params['name'].replace("/", ".")
|
||
try:
|
||
import_string = "from jobs.tasks.%s import JobTask as job_target" % (module_name)
|
||
exec(import_string, globals())
|
||
target = job_target()
|
||
target.run(ret_params)
|
||
except Exception as e:
|
||
traceback.print_exc()
|
||
click.echo(f"执行任务失败: {str(e)}")
|
||
return False
|