【发布时间】:2018-06-13 22:38:43
【问题描述】:
我正在运行下面的命令,将两个参数传递给我的脚本文件(下面的命令是从 java 构造的):
sh /home/accure/Desktop/scripts/cronhandler.sh "/home/accure/Desktop/scripts/pipeline.sh 028d8ccb-4c46-4e02-a9b0-3c97a383daaf" "* * * * */5"
"/home/accure/Desktop/scripts/pipeline.sh 028d8ccb-4c46-4e02-a9b0-3c97a383daaf" 是第一个参数,"* * * * */5" 是第二个参数,基本上是一个 cron 表达式。
cronhandler.sh 是我的脚本文件,其中包含以下代码:
if [ "$#" -eq 2 ]
then
echo "Crontab with create & update functionality"
command=$1
cron_exp=$2
echo "cron_exp=$cron_exp"
echo "command=$command"
cron_exp=`echo $cron_exp | sed 's/"//g' `
command=`echo $command | sed 's/"//g' `
echo "cron_exp=$cron_exp"
echo "command=$command"
if [[ "$cron_exp" != " " && "$command" != " " ]]
then
crontab -l | grep -q "$command"
if [ $? -eq 0 ]
then
crontab -l | grep -v "$command" | crontab -
echo "CRON entry deleted successfully.."
else
echo "CRON entry deletion failed."
fi
crontab -l | grep -q "$command" || (crontab -l 2>/dev/null; echo "$cron_exp $command") | crontab -
if [ $? -eq 0 ]
then
echo "CRON entry added successfully.."
else
echo "CRON entry addition failed."
fi
fi
fi
我在运行脚本时遇到的错误如下。实际上它是从当前工作目录中列出我的文件和文件夹,而不是将 cron 表达式添加到 cron 选项卡。
具有创建和更新功能的 Crontab cron_exp=* * * * */5 命令=/home/accure/Desktop/scripts/pipeline.sh 028d8ccb-4c46-4e02-a9b0-3c97a383daaf cron_exp=14.5 LinkedList vs Java中的ArrayList-QWMyhFUtFHo.mp4 [57.64911004342139,10.407439861446619] accure-facebook-parser-1.0-SNAPSHOT-jar-with-dependencies.jar apache-tomcat-7.0.41 Core Java with OCJP_SCJP - Collections Part-11 _ Map_Hashmap_链接Hashmap-pSGvbJ7GJ68.mp4.part桌面文档 下载 epel-release-6-8.noarch.rpm HashMap 如何在 Java 中工作 动画!! java8 教程中的新内容-c3RVW3KGIIE.mp4 摄取 Java 采访 - Hashmap 的工作原理 -YR7Vp7HcAgs.mp4 jce_policy-8.zip mongodata 音乐 netbeans-7.4 NetBeansProjects 图片公开类星体 robomongo-0.8.4-x86_64 sa softs solr-6.2.1 solr-6.2.1.tgz 模板 testdata UnlimitedJCEPolicyJDK8 视频 Vinod 14.5 LinkedList vs Java中的ArrayList-QWMyhFUtFHo.mp4 [57.64911004342139,10.407439861446619] accure-facebook-parser-1.0-SNAPSHOT-jar-with-dependencies.jar apache-tomcat-7.0.41 Core Java with OCJP_SCJP - Collections Part-11 _ Map_Hashmap_链接Hashmap-pSGvbJ7GJ68.mp4.part桌面文档 下载 epel-release-6-8.noarch.rpm HashMap 如何在 Java 中工作 动画!! java8 教程中的新内容-c3RVW3KGIIE.mp4 摄取 Java 采访 - Hashmap 的工作原理 -YR7Vp7HcAgs.mp4 jce_policy-8.zip mongodata 音乐 netbeans-7.4 NetBeansProjects 图片公开类星体 robomongo-0.8.4-x86_64 sa softs solr-6.2.1 solr-6.2.1.tgz 模板 testdata UnlimitedJCEPolicyJDK8 视频 Vinod 14.5 LinkedList vs Java中的ArrayList-QWMyhFUtFHo.mp4 [57.64911004342139,10.407439861446619] accure-facebook-parser-1.0-SNAPSHOT-jar-with-dependencies.jar apache-tomcat-7.0.41 Core Java with OCJP_SCJP - Collections Part-11 _ Map_Hashmap_链接Hashmap-pSGvbJ7GJ68.mp4.part桌面文档 下载 epel-release-6-8.noarch.rpm HashMap 如何在 Java 中工作 动画!! java8 教程中的新内容-c3RVW3KGIIE.mp4 摄取 Java 采访 - Hashmap 的工作原理 -YR7Vp7HcAgs.mp4 jce_policy-8.zip mongodata 音乐 netbeans-7.4 NetBeansProjects 图片公开类星体 robomongo-0.8.4-x86_64 sa softs solr-6.2.1 solr-6.2.1.tgz 模板 testdata UnlimitedJCEPolicyJDK8 视频 Vinod 14.5 LinkedList vs Java中的ArrayList-QWMyhFUtFHo.mp4 [57.64911004342139,10.407439861446619] accure-facebook-parser-1.0-SNAPSHOT-jar-with-dependencies.jar apache-tomcat-7.0.41 Core Java with OCJP_SCJP - Collections Part-11 _ Map_Hashmap_链接Hashmap-pSGvbJ7GJ68.mp4.part桌面文档 下载 epel-release-6-8.noarch.rpm HashMap 如何在 Java 中工作 动画!! java8 教程中的新内容-c3RVW3KGIIE.mp4 摄取 Java 采访 - Hashmap 的工作原理 -YR7Vp7HcAgs.mp4 jce_policy-8.zip mongodata 音乐 netbeans-7.4 NetBeansProjects 图片公开类星体 robomongo-0.8.4-x86_64 sa softs solr-6.2.1 solr-6.2.1.tgz 模板 testdata UnlimitedJCEPolicyJDK8 视频 Vinod */5 命令=/home/accure/Desktop/scripts/pipeline.sh 028d8ccb-4c46-4e02-a9b0-3c97a383daaf CRON 条目删除失败。 "-":2: crontab 文件中的严重错误,无法安装。 CRON 条目 添加失败。
注意:cron 表达式中的* 被添加到 crontab 中,而是从当前工作目录中列出我的文件和文件夹。
下面给出了我调用命令行的Java代码:
String pipelineFilePath="sh /home/accure/Desktop/scripts/pipeline.sh 028d8ccb-4c46-4e02-a9b0-3c97a383daaf";
String cronExp="* * * * */5";
pipelineFilePath = "\"" + pipelineFilePath + "\"";
cronExp = "\"" + cronExp + "\"";
command = "sh " + /home/accure/Desktop/scripts/cronhandler.sh + " " + pipelineFilePath + " " + cronExp;
runScript(command);
public void runScript(String script) throws InterruptedException {
final String cmd = script;
Thread runScript = new Thread(new Runnable() {
public void run() {
try {
DefaultExecutor executor = new DefaultExecutor();
CommandLine commandLine = CommandLine.parse(cmd);
executor.setExitValue(1);
int exitValue = executor.execute(commandLine);
} catch (Exception ex) {
}
}
});
runScript.start();
Thread.sleep(10000);
}
【问题讨论】: