xuxueli / xxl-job

A distributed task scheduling framework.(分布式任务调度平台XXL-JOB)
http://www.xuxueli.com/xxl-job/
GNU General Public License v3.0
27.89k stars 10.98k forks source link

xxjob 定时任务 执行时,能否制定Python 版本 #1585

Open songhao8080 opened 4 years ago

songhao8080 commented 4 years ago

xxjob 定时任务 执行时,能否制定Python 版本,目前python2 已经不更新了。 在文件头部制定版本不生效

#!/home/xxx/anaconda3/bin/python3
# -*- coding: UTF-8 -*-

查的资料 如果使用第二种方法可以正确执行 image

cdcchen commented 4 years ago

个人感觉第二种方法是没有必要的

songhao8080 commented 4 years ago

个人感觉第二种方法是没有必要的

第一种方式无法指定 Python 版本,或者 能从配置里指定 Python 路径,如果没有找到再用默认的路径

cdcchen commented 4 years ago

个人感觉第二种方法是没有必要的

第一种方式无法指定 Python 版本,或者 能从配置里指定 Python 路径,如果没有找到再用默认的路径

第一种是可以指定的啊。 /usr/bin/python script.py /usr/bin/python3.5 script.py /usr/bin/python3.7 script.py

songhao8080 commented 4 years ago

个人感觉第二种方法是没有必要的

第一种方式无法指定 Python 版本,或者 能从配置里指定 Python 路径,如果没有找到再用默认的路径

第一种是可以指定的啊。 /usr/bin/python script.py /usr/bin/python3.5 script.py /usr/bin/python3.7 script.py

在 脚本指定不生效

Shawyeok commented 4 years ago

xxljob默认通过PATH中python命令执行python任务脚本,linux中python命令默认是python2,你也可以将其指向到你想要的python3。但我们觉得这种办法需要修改系统PATH配置有点不妥,于是我们修改了executor中ScriptJobHandler的一段代码,使其可以从环境变量中读取相应配置,以此作为python解释器。大致如下:

$GLUE_PYTHON_EXEC <script.py>
xujingbin commented 3 years ago

xxljob默认通过PATH中python命令执行python任务脚本,linux中python命令默认是python2,你也可以将其指向到你想要的python3。但我们觉得这种办法需要修改系统PATH配置有点不妥,于是我们修改了executor中ScriptJobHandler的一段代码,使其可以从环境变量中读取相应配置,以此作为python解释器。大致如下:

$GLUE_PYTHON_EXEC <script.py>

想问下 具体改哪个位置

Shawyeok commented 3 years ago

想问下 具体改哪个位置

@xujingbin 大致如下:

diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/glue/GlueTypeEnum.java b/xxl-job-core/src/main/java/com/xxl/job/core/glue/GlueTypeEnum.java
index 55100be9..f29273c8 100644
--- a/xxl-job-core/src/main/java/com/xxl/job/core/glue/GlueTypeEnum.java
+++ b/xxl-job-core/src/main/java/com/xxl/job/core/glue/GlueTypeEnum.java
@@ -15,13 +15,13 @@ public enum GlueTypeEnum {

     private String desc;
     private boolean isScript;
-    private String cmd;
+    private String defaultCmd;
     private String suffix;

-    private GlueTypeEnum(String desc, boolean isScript, String cmd, String suffix) {
+    private GlueTypeEnum(String desc, boolean isScript, String defaultCmd, String suffix) {
         this.desc = desc;
         this.isScript = isScript;
-        this.cmd = cmd;
+        this.defaultCmd = defaultCmd;
         this.suffix = suffix;
     }

@@ -33,8 +33,8 @@ public enum GlueTypeEnum {
         return isScript;
     }

-    public String getCmd() {
-        return cmd;
+    public String getDefaultCmd() {
+        return defaultCmd;
     }

     public String getSuffix() {
diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java b/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java
index 452c3877..88a71ab4 100644
--- a/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java
+++ b/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java
@@ -7,6 +7,7 @@ import com.xxl.job.core.log.XxlJobFileAppender;
 import com.xxl.job.core.log.XxlJobLogger;
 import com.xxl.job.core.util.ScriptUtil;
 import com.xxl.job.core.util.ShardingUtil;
+import org.springframework.util.StringUtils;

 import java.io.File;

@@ -53,7 +54,7 @@ public class ScriptJobHandler extends IJobHandler {
         }

         // cmd
-        String cmd = glueType.getCmd();
+        String cmd = getCmd();

         // make script file
         String scriptFileName = XxlJobFileAppender.getGlueSrcPath()
@@ -89,4 +90,24 @@ public class ScriptJobHandler extends IJobHandler {

     }

+    /**
+     * 获取相应GLUE任务的CMD命令,优先从环境变量中读取命令
+     * <ul>
+     *     <li>GLUE_SHELL_EXEC</li>
+     *     <li>GLUE_PYTHON_EXEC</li>
+     *     <li>GLUE_PHP_EXEC</li>
+     *     <li>GLUE_NODEJS_EXEC</li>
+     *     <li>GLUE_POWERSHELL_EXEC</li>
+     * </ul>
+     *
+     * @return GLUE任务的cmd命令
+     */
+    private String getCmd() {
+        String env = glueType.name() + "_EXEC";
+        String value = System.getenv(env);
+        if (!StringUtils.isEmpty(value)) {
+            return value;
+        }
+        return glueType.getDefaultCmd();
+    }
 }
xujingbin commented 3 years ago

@Shawyeok 谢谢哦,这样改的好多哦, 我后来有改了,就把python改成python3,如果需要多个版本我就编译多个版本的执行器 GLUE_PYTHON("GLUE(Python)", true, "python3", ".py"),

a736875071 commented 1 year ago

其实不用这么麻烦,把python的软链接改为由python2改为python3就行了,这样python默认就是python3,不用像网上说的去修改源码,亲测可以