使用Java定时执行shell脚本

2023-11-10

执行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没有结束,后一个已经开始的情况 ,所以要考虑到同步的问题.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Java定时执行shell脚本 的相关文章

随机推荐

  • HTML5新控件 - url类型输入框(网址)

    如果需要一个用来填写url地址的输入框 可以使用url类型 这样浏览器可以帮我们验证格式是否正确 而不需要自己写验证规则 网址验证规则 首先要有一个URL前缀 http ftp 等 后面可以是空格和大多数特殊字符 冒号除外
  • Theano学习系列(3):符号变量的方法之creat new tensor

    Theano学习系列 3 符号变量的方法之Creat New Tensor 和前两节一样 本节重点讲述tensor方法中的creat new tensor这些知识 这一节共有11个函数需要我们去学习掌握 由于有的函数区别很小 这里只介绍一部
  • AD 画PCB布线时,走线网线高亮,其它不走线网络变黑的设置方法

    正常布线时显示效果 布线时所有PCB显示都正常 设置不走线网格变黑的方法 2 1 T P调出配置项 tools Preferences PCB Editor Display中Highlighting Options 然后勾选apply ma
  • 通过Pyecharts和Matplotlib对数据中的性别信息进行可视化

    前言 在进行描述性数据分析时会遇到需要进行分类统计的数据 例如性别 所在地区等等 本篇文章用数据中的性别信息为例并通过Pyecharts和Matplotlib对其进行可视化 1 导入数据 import pandas as pd import
  • 熵、联合熵、条件熵

    1 单变量的熵 离散型随机变量的熵 熵是一个随机变量不确定性的度量 一个随机变量的熵越大 意味着不确定性越大 换言之 该随机变量包含的信息量越大 必然事件是确定无疑的 并不含有不确定性 所以必然事件的熵应该是0 也就是说 必然事件不含有信息
  • MIPI(D-PHY)协议简介&测量方法&测试项简介

    作者 AirCity 2020 2 20 Aircity007 sina com 本文所有权归作者Aircity所有 1 MIPI Alliance 说起MIPI 就得说下这个MIPI Alliance 这个联盟聚集了很多知名IC大厂 手机
  • Kubernetes[k8s] 最新版1.27.3安装教程,使用containerd模式

    背景 公司使用的是交老的k8s版本 1 16 由于老版本的K8s对于现在很多新特性不支持 所以需要升级到新版本 目前2023年7月11日最新版本的k8s是v1 27 3 通过参考官方文档进行k8s部署工作 其中涉及到操作系统配置 防火墙配置
  • ES6 中的let、const与var的区别

    首先需要明确的是let const var都是用来定义变量的 在ES6之前 我们一般都用var来定义变量 例如 function test var i 1 console log i console log j var j 2 test c
  • xgboost的优势是什么,为什么能在人工智能竞赛中取得好成绩

    XGBoost eXtreme Gradient Boosting 是一种高效的集成学习算法 它是在基于决策树的梯度提升算法的基础上进行改进 它的优势在于 高效 XGBoost使用了并行化处理 能够快速训练大规模的数据集 稳定 XGBoos
  • vscode 无法连接远程服务器 .vscode-server Permission denied

    错误log 用 VScode直接连接服务器 遇到这个问题 我的终端ssh是可以直接登上服务器的 VScode不行 18 41 45 067 Server installation process already in progress wa
  • Python操作mongodb数据库详解

    数据库的分类 数据库可以简单的分为 MySQL 和 NOSQL 两类 这里的 NOSQL 不是 NO SQL 的意思 他的意思是 Not Only MySQL MySQL与NoSQL之间的区别 1 MySQL是一个基于表格设计的关系数据库
  • 线性代数学习笔记——第七十一讲——正交矩阵

    1 正交矩阵引例 2 正交矩阵的定义 3 正交矩阵的充要条件是其行 列 向量组都是规范正交向量组 4 正交矩阵判定示例 5 正交矩阵的应用示例1 6 正交矩阵的应用示例2
  • 【MacOS】SSH 设置别名+免密登录

    设置别名 首先 进入ssh的config文件 vim ssh config 按I写入 Host my name User zmq HostName 1xx xx xx xxx Port 22 输入 x保存退出 设置别名成功 可以直接 ssh
  • 朴素贝叶斯算法_朴素贝叶斯算法介绍(补充)

    朴素贝叶斯是基于贝叶斯决策理论和特征属性独立假设的生成方法 朴素贝叶斯中的朴素是指特征条件独立假设 贝叶斯定理是用来描述两个条件概率之间的关系 上一篇有做一些介绍 朴素贝叶斯算法介绍 这次做一些补充 1 贝叶斯原理 先验概率 通过经验来判断
  • log4net使用

    说明 本程序演示如何利用log4net记录程序日志信息 log4net是一个功能著名的开源日志记录组件 利用log4net可以方便地将日志信息记录到文件 控制台 Windows事件日志和数据库 包括MS SQL Server Access
  • 2023年全国职业院校技能大赛-高职组“区块链技术应用”赛项赛卷(1卷)

    目录 模块一 区块链产品方案设计及系统运维 35分 任务1 1 区块链产品需求分析与方案设计 区块链食品溯源系统概要设计说明书 1 引言 1 1编写目的 2 总体设计 2 1需求规定 2 1 2输入输出要求 2 2运行环境 2 2 1支持架
  • 30-Docker-常用命令详解-docker cp

    Docker 常用命令详解 docker cp 前言 docker cp 语法格式 options说明 SRC PATH 和 DEST PATH 说明 使用示例 从容器复制文件到主机 从主机复制目录到容器 前言 本篇来学习docker cp
  • SpringBoot自动配置原理

    自动装配简单来说就是自动把第三方组件的bean装载到IOC容器里面 不需要开发人员再去写bean相关的配置 在springboot应用里面只需要在启动类中加上 springbootapplication注解就可以实现自动注解配置 他是一个复
  • uni-app开发小程序无需https接口即可上线

    云函数的使用 使用uniCloud创建云函数 具体使用见官方说明https uniapp dcloud io uniCloud quickstart 调用方法 在开通云函数的时候 uni官方给出两种方案 一种腾讯云 基本与微信小程序的云开发
  • 使用Java定时执行shell脚本

    执行shell脚本 Runtime getRuntime exec 可以直接执行部分命令 不过执行一个shell脚本的话更方便修改 public static void runshell String path try String get