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. 這個項目設計很精巧,實在佩服。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM