package com.xxl.job.core.handler.impl;
|
|
import com.xxl.job.core.context.XxlJobContext;
|
import com.xxl.job.core.context.XxlJobHelper;
|
import com.xxl.job.core.glue.GlueTypeEnum;
|
import com.xxl.job.core.handler.IJobHandler;
|
import com.xxl.job.core.log.XxlJobFileAppender;
|
import com.xxl.job.core.util.ScriptUtil;
|
|
import java.io.File;
|
|
/**
|
* Created by xuxueli on 17/4/27.
|
*/
|
public class ScriptJobHandler extends IJobHandler {
|
|
private int jobId;
|
private long glueUpdatetime;
|
private String gluesource;
|
private GlueTypeEnum glueType;
|
|
public ScriptJobHandler(int jobId, long glueUpdatetime, String gluesource, GlueTypeEnum glueType){
|
this.jobId = jobId;
|
this.glueUpdatetime = glueUpdatetime;
|
this.gluesource = gluesource;
|
this.glueType = glueType;
|
|
// clean old script file
|
File glueSrcPath = new File(XxlJobFileAppender.getGlueSrcPath());
|
if (glueSrcPath.exists()) {
|
File[] glueSrcFileList = glueSrcPath.listFiles();
|
if (glueSrcFileList!=null && glueSrcFileList.length>0) {
|
for (File glueSrcFileItem : glueSrcFileList) {
|
if (glueSrcFileItem.getName().startsWith(String.valueOf(jobId)+"_")) {
|
glueSrcFileItem.delete();
|
}
|
}
|
}
|
}
|
|
}
|
|
public long getGlueUpdatetime() {
|
return glueUpdatetime;
|
}
|
|
@Override
|
public void execute() throws Exception {
|
|
if (!glueType.isScript()) {
|
XxlJobHelper.handleFail("glueType["+ glueType +"] invalid.");
|
return;
|
}
|
|
// cmd
|
String cmd = glueType.getCmd();
|
|
// make script file
|
String scriptFileName = XxlJobFileAppender.getGlueSrcPath()
|
.concat(File.separator)
|
.concat(String.valueOf(jobId))
|
.concat("_")
|
.concat(String.valueOf(glueUpdatetime))
|
.concat(glueType.getSuffix());
|
File scriptFile = new File(scriptFileName);
|
if (!scriptFile.exists()) {
|
ScriptUtil.markScriptFile(scriptFileName, gluesource);
|
}
|
|
// log file
|
String logFileName = XxlJobContext.getXxlJobContext().getJobLogFileName();
|
|
// script params:0=param、1=分片序号、2=分片总数
|
String[] scriptParams = new String[3];
|
scriptParams[0] = XxlJobHelper.getJobParam();
|
scriptParams[1] = String.valueOf(XxlJobContext.getXxlJobContext().getShardIndex());
|
scriptParams[2] = String.valueOf(XxlJobContext.getXxlJobContext().getShardTotal());
|
|
// invoke
|
XxlJobHelper.log("----------- script file:"+ scriptFileName +" -----------");
|
int exitValue = ScriptUtil.execToFile(cmd, scriptFileName, logFileName, scriptParams);
|
|
if (exitValue == 0) {
|
XxlJobHelper.handleSuccess();
|
return;
|
} else {
|
XxlJobHelper.handleFail("script exit value("+exitValue+") is failed");
|
return ;
|
}
|
|
}
|
|
}
|