我是靠谱客的博主 悲凉抽屉,最近开发中收集的这篇文章主要介绍使用Java定时执行shell脚本,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

执行shell脚本

  • Runtime.getRuntime().exec() 可以直接执行部分命令,不过执行一个shell脚本的话更方便修改

public static void
runshell(String path){
try {
String getX="chmod a+x "+path;
// 给予执行权限
Process process =Runtime.getRuntime().exec(getX);
process.waitFor();
//执行脚本
process=Runtime.getRuntime().exec("bash "+path);
process.waitFor();
//获取执行结果
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
StringBuilder stringBuilder= new StringBuilder();
String line;
while (( line = bufferedReader.readLine()) != null) {
stringBuilder.append(line).append("n");
}
//输出执行结果
System.out.println(stringBuilder.toString());
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

Java中的定时任务

  • TimerTask是一个定时任务类, 需要重写 run()方法,其中为将要定时执行的操作,在这里是打印当前时间,执行 runshell() 方法

  • TImer是一个定时器类,scheduleAtFixedRate()方法根据传入的参数定时执行timertask , 三个参数分别为

    • TimerTask task : 要执行的任务
    • long delay || Date firstTime : 等待delay 毫秒执行第一次 || 在firstTime时执行第一次
    • long period: 每次执行的时间间隔

public static void main(String[] paths) {
String path;
//有参数
if (paths.length>0){
path=paths[0];
}
else {
path="do.sh";
}
TimerTask task=new TimerTask() {
@Override
public void run() {
System.out.println("now : "+ LocalDateTime.now());
runshell(path);
}
};
Timer timer=new Timer();
long delay=0;
long period=1000*2;
timer.scheduleAtFixedRate(task,delay,period);
}
  • 使用 scheduleAtFixedRate() 时,可能出现前一个task没有结束,后一个已经开始的情况 ,所以要考虑到同步的问题.

最后

以上就是悲凉抽屉为你收集整理的使用Java定时执行shell脚本的全部内容,希望文章能够帮你解决使用Java定时执行shell脚本所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部