• xxl-job 增加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. 这个项目设计很精巧,实在佩服。

  • 相关阅读:
    清除vs2005、vs2008起始页最近打开项目
    解决VS2005打开js,css,asp.php等文件,中文都是乱码的问题
    “007~ASP 0104~不允许操作”错误的解决方法(图解)
    nofollow标签浪费了多少站长做外链的时间
    如果你的评论被WordPress的Akismet插件屏蔽,怎么解封?
    VPS磁盘划分建立新磁盘
    ASP.NET使用AJAX应注意IIS有没有.ashx扩展
    将磁盘从FAT格式转换为NTFS格式的方法
    C#调用RabbitMQ实现消息队列(转载)
    超燃:2019 中国.NET 开发者峰会视频发布
  • 原文地址:https://www.cnblogs.com/wgh0807/p/13391185.html
Copyright © 2020-2023  润新知