xxl-job 增加python3

摘要:
xxl-job项目中,可以定时执行python脚本,但默认都是使用linux系统自带的python2.7执行脚本,与常用且常写的python3不符。比如我在这个枚举新增了一个python3,既不影响之前的python2.x脚本,也可以执行python3脚本。所以先尝试了其他方法:我首先尝试的是修改linux配置,考虑了卸载python2,毕竟官方已经不支持了。后来我想,我如果用一个非root用户,我就可以设置别名,将python指向/usr/bin/python3,然后使用该用户启动执行器,那样执行器应该用的当前用户的环境变量,可以把python命令指向python3。

xxl-job 项目中,可以定时执行python脚本,但默认都是使用linux系统自带的python2.7执行脚本,与常用且常写的python3不符。本文主要解决这个问题。

解决方案

修改直接修改 com.xxl.job.core.glue.GlueTypeEnum 这个枚举即可。比如我在这个枚举新增了一个python3,既不影响之前的python2.x脚本,也可以执行python3脚本。

仅此而已,其他地方无需修改

xxl-新增python3

需要注意,修改core后,admin & executor 两个项目都需要重新获取下依赖,将这个修改同步到两个项目中。否则启动不会报错,但执行时候会报错。

e.g. 我的admin项目没有更新这个包,所以运行模式没有新增的py3选项。我的executor没有更新这个包,导致调度器执行失败,错误信息如下:

>>>>>>>>>>>触发调度<<<<<<<<<<< 
触发调度:
address:http://172.16.3.15:38078/
code:500
msg:glueType[GLUE_PYTHON3] is not valid.

修改过程

之前没有修改过源码,认为修改会很麻烦,尤其这次涉及到页面。所以先尝试了其他方法:

  1. 我首先尝试的是修改linux配置,考虑了卸载python2,毕竟官方已经不支持了。我的系统是Ubuntu 16.04.6 LTS,有14个包依赖于py2,其中有部分系统包。所以选择了放弃。

  2. 后来我想,我如果用一个非root用户,我就可以设置别名,将 python 指向 /usr/bin/python3,然后使用该用户启动执行器,那样执行器应该用的当前用户的环境变量,可以把python命令指向python3。但是这个方法并未起作用。 我觉得很奇怪,没搞懂为什么不行。懂的小伙伴麻烦分享下想法。

    # 修改用户目录下的 .bashrc 文件,新增以下配置
    alias python='/usr/bin/python3'
    
  3. 最后尝试看下源码,发现只修改这个枚举就可以。因为作者使用的是freemarker生成网页,在获取列表的时候,直接循环遍历了这个枚举类,不需要修改任何其他地方,直接就可以新增选项!为许雪里大大点赞

个人理解

  1. 因为脚本内容属于任务相关信息,所以作者大大直接放到了xxl_job_info表中。

  2. 调度器将任务信息传输给执行器的时候,若任务不是bean且在枚举中可以匹配到(根据名称匹配),则认定为脚本,构建ScriptJobHandler实例。当执行方法被调度的时候,会新建脚本文件:日志目录/gluesource/jobId_时间long值.后缀,其中后缀是根据GlueTypeEnumsuffix字段配置。在输出文件且准备参数(分片信息&参数信息)后,执行 命令 文件名称,实现脚本调度。其中命令是获取GlueTypeEnum对象的cmd 属性。

  3. XxlJobLogger打印的日志能反映到页面显示,可以考虑直接使用其记录日志:

    XxlJobLogger.log("显示的信息");
    
  4. 这个项目设计很精巧,实在佩服。

免责声明:文章转载自《xxl-job 增加python3》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇linux 静态库 ar命令用法Jenkins 实现 ldap认证下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python3与FastDFS交互(py3Fdfs)

现有的FastDFS数据库与python交互, 多是通过下载fdfs-client-py,pip本地安装. 不过该模块只适用于Python2, 且适配FastDFS版本较为古老.在Python3中, 有相对应的py3fdfs模块安装 pip install py3Fdfs    py3fdfs源于fdfs-client,但在使用过程中, 和旧版略有不同....

python3之字符串(str)

1 命名 str='value' str="value" 2 原始字符串 str=r'value' value按照字面的意思使用,没有转义特殊或不能打印的字符 原始字符串除在字符串的第一个引号前加上字母"r"(可以大小写)以外,与普通字符串有着几乎完全相同的语法 3 转义字符 (在行尾时) 续行符 \...

Dirsearch 快速开始

Dirsearch 一个 web 路径扫描工具 本文版本:v0.4.1(2020.12.8) 安装 下载源代码: git clone https://github.com/maurosoria/dirsearch.git 安装需求的 python 库: cd dirsearch pip3 install -r requirements.txt 或者使用...

Python 3: 加密简介

Python 3 的标准库中没多少用来解决加密的,不过却有用于处理哈希的库。在这里我们会对其进行一个简单的介绍,但重点会放在两个第三方的软件包:PyCrypto 和 cryptography 上。我们将学习如何使用这两个库,来加密和解密字符串。 哈希 如果需要用到安全哈希算法或是消息摘要算法,那么你可以使用标准库中的 hashlib 模块。这个模块包含了符...

centos7安装python3.7

Centos7安装python3.71、安装python3依赖包  安装python3 需要很多的依赖包,所以我们先安装依赖包,在Linux上直接敲击命令就可以。(在根目录上执行,先切换到根目录:cd /)  注意:(如果实在不想敲命令的,我告诉大家一个捷径、使用Xshell 连接你的虚拟机,然后就可以直接粘贴复制上面的命令执行了。粘贴复制不要用快捷键操作...

mac安装python3

环境MacOS 10.12 xcode9.2 MacOS 系统自带python,可以在终端输入python查看版本【输入exit()即可退出】 1.安装xcode-select 2.安装homebrew 3.安装python3 1.安装xcode-select终端输入xcodebuild -version查xcode版本 若未安装,先安装 xcode 软...