java调用shell脚本并传递参数

最近业务上需要java调用执行shell脚本进行一些业务处理,写了个demo,记录下。

主要代码

    @RequestMapping("/copy/database")@ResponseBodypublic String copyDatabase(HttpServletRequest request,String dbCode,String targetPath){JSONObject result = new JSONObject();String osname = System.getProperty("os.name");if ((osname != null) && (osname.toLowerCase().startsWith("win"))){LOG.info("当前操作系统是:"+osname);result.put("code", "0");result.put("msg", "当前服务器操作系统不是linux");return result.toJSONString();}LOG.info("接收到参数:dbCode=" + dbCode + " targetDbNfsPath=" + targetPath);if(StringUtil.isBlank(dbCode) || StringUtil.isBlank(targetPath)){result.put("code", "0");result.put("msg", "dbCode/targetPath不能为空");return result.toJSONString();}String dir = DbDirConstant.findDir(dbCode);if(StringUtil.isBlank(dir)){result.put("code", "0");result.put("msg", "根据dbCode找不到对应的数据库目录");return result.toJSONString();}//脚本路径String shellPath = request.getServletContext().getRealPath("/")+"WEB-INF/classes";String cmd = shellPath + "/copyDB.sh "+ dir + " " + targetPath;ProcessBuilder builder = new ProcessBuilder("/bin/sh","-c",cmd);builder.directory(new File(shellPath));int runningStatus = 0;String s = null;StringBuffer sb = new StringBuffer();try {Process p = builder.start();BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));while ((s = stdInput.readLine()) != null) {LOG.info("shell log info ...." + s);sb.append(s);}while ((s = stdError.readLine()) != null) {LOG.error("shell log error...." + s);sb.append(s);}try {runningStatus = p.waitFor();} catch (InterruptedException e) {runningStatus = 1;LOG.error("等待shell脚本执行状态时,报错...",e);sb.append(e.getMessage());}closeStream(stdInput);closeStream(stdError);} catch (Exception e) {LOG.error("执行shell脚本出错...",e);sb.append(e.getMessage());runningStatus =1;}LOG.info("runningStatus = " + runningStatus);if(runningStatus == 0){//成功result.put("code", "1");result.put("msg", "成功");return result.toJSONString();}else{result.put("code", "0");result.put("msg", "调用shell脚本复制数据库时失败..." + sb.toString());return result.toJSONString();}}private void closeStream(BufferedReader reader){try {if(reader != null){reader.close();}} catch (Exception e) {reader = null;}}

其中shell

#!/bin/bashecho 'copy db start....'dbBack=/databaseBack
nfsDir=/targetDbNfs
state=0cd /if [ ! -d "$nfsDir" ];thenmkdir -p $nfsDir
fi## mount target db
echo 'ready mount target db...'
mount -t nfs $2 $nfsDirif [ $? -eq 0 ]thenecho 'mount target db success...'elseecho 'mount target db fail...'exit 1
fiecho 'ready copy....'
## cp will tip y/n, so use \cp 
\cp -rf $dbBack/$1/* $nfsDir/if [ $? -eq 0 ]thenecho 'copy success...'elseecho 'copy fail...'$state=1
fiumount $nfsDirexit $state

注意事项:
1.shell脚本必须有执行权限,比如部署后chmod -R 777 /webapps

2.shell文件,必须是UNIX格式,ANSI编码格式,否则容易出问题(可以用notepad++,编辑->文档格式转换,格式->转为ANSI格式
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497485.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

贝叶斯机器学习前沿进展

来源:人机与认知实验室概要:随着大数据的快速发展,以概率统计为基础的机器学习在近年来受到工业界和学术界的极大关注,并在视觉、语音、自然语言、生物等领域获得很多重要的成功应用。摘要 随着大数据的快速发展,以概率…

matlab knn,MATLAB K近邻算法 — knnsearch() 函数 | 学步园

K近邻IDX knnsearch(X,Y) finds the nearest neighbor in X for each point inY. X is an MX-by-N matrix and Y is an MY-by-N matrix. Rows of X and Ycorrespond to observations and columns correspond to variables. IDX isa column vector with MY rows. Each row in I…

数据库事务的概念及其实现原理

目录 1. 认识事务 1.1 为什么需要数据库事务1.2 什么是数据库事务1.3 事务如何解决问题1.4 事务的ACID特性以及实现原理概述2.并发异常与并发控制技术 2.1 常见的并发异常2.2 事务的隔离级别2.3 事务隔离性的实现——常见的并发控制技术 2.3.1 基于封锁的并发控制2.3.2 基于时…

Fast.ai推出NLP最新迁移学习方法「微调语言模型」,可将误差减少超过20%!

原文来源:arxiv作者:Jeremy Howard、Sebastian Ruder「雷克世界」编译:嗯~是阿童木呀可以这样说,迁移学习已经促使计算机视觉领域发生了具有革命性的变化,但对于自然语言处理(NLP)中的现有方法来…

php去除txt重复,用vbscript实现从文本文件中删除所有重复行的代码

这篇文章主要为大家介绍了关于从文本文件中删除重复名字的类似问题,需要的朋友可以参考一下问:您好,脚本专家!如何从文本文件中删除所有重复行?-- SW答:您好,SW。您知道,成为一名脚本…

Spring Data JPA事务管理

1、事务基础概念_四大特性 数据库中事务的四大特性(ACID),如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性,是指事务包含的所有…

教育部发文:AI、算法等2018年进入全国高中课程!

来源:全球人工智能概要:1月16日上午,教育部召开新闻发布会,介绍了《普通高中课程方案和语文等学科课程标准(2017年版)》的有关情况,并重新修订了语文等14门学科的课程标准。1月16日上午&#xf…

经典php代码,HTML_php教程:经典PHP代码,经典循环例子 HTMLHEAD - phpStudy

经典循环例子经典循环例子for($counter 1; $counter < 6; $counter) //循环6次{print("counter is $counter\n"); //打印6次}?>for的高级运用for的高级运用/*** 打印必要的说明文字*/print("距离星期一还有几天&#xff1f;\n");print(&…

JPA事务示例分析

在这个工程中&#xff0c;定义一个名为User的实体&#xff1a; Entity Data NoArgsConstructor public class User {IdGeneratedValueprivate Long id;Size(max 5)private String name;Max(50)private Integer age;public User(String name, Integer age) {this.name name;t…

智能零售来了!Amazon Go无人商店周一正式对公众开放

来源&#xff1a;网络大数据概要&#xff1a;经过近 14 个月只对亚马逊公司员工开放的试运行&#xff0c;周一这家标着 Amazon Go 标志的店面将公开亮相&#xff0c;这是亚马逊近年来投入最多努力的项目之一&#xff0c;旨在重塑实体购物的体验。据《西雅图时报》报道&#xff…

python函数时间,python之时间函数

用time模块的strftime函数时间日期的格式化时间import timeprint(time.strftime(%y/%m/%d %H:%M:%S %A))格式化符号说明格式化符号说明格式化符号说明%Y年(2019)%B月(June)%A星期(Thursday)%y年(19)%b月(Jun)%a星期(Thu)%I时(02)%m月(06)%w星期(4)(0~6)(0是周日)%H时(14)%M分(2…

JPA - EntityTransaction与事务

EntityTransaction 接口用来管理资源层实体管理器的事务操作&#xff0c;通过调用实体管理器的getTransaction方法 获得其实例。 其常用方法如下&#xff1a; ① begin 用于启动一个事务&#xff0c;此后的多个数据库操作将作为整体被提交或撤消。 若这时事务已启动则会抛出…

看懂GE Predix ,就看懂了工业互联网

来源&#xff1a;小黑羊JoinWings概要&#xff1a;Predix是GE推出的针对整个工业领域的基础性系统平台&#xff0c;这是一个开放的平台&#xff0c;它可以应用在工业制造、能源、医疗等各个领域。Predix是GE推出的针对整个工业领域的基础性系统平台&#xff0c;这是一个开放的平…

php传递数据给jquery,将值从php传递给jquery

我需要一些帮助&#xff0c;我想知道如何将一个值从PHP变量传递给jquery脚本&#xff1f;我正在做的是打开一个模式窗口&#xff0c;从mysql浏览器创建的元素列表中&#xff0c;所以我需要传递一个变量值的锚点。这是我的代码&#xff1a;$query_tours "Select * from to…

JPA和事务管理

1 事务 1.1事务管理方式 spring支持编程式事务管理和声明式事务管理两种方式。 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理&#xff0c;spring推荐使用TransactionTemplate。 声明式事务管理建立在AOP之上的…

纽约大学Gary Marcus发文指出AlphaZero「被夸大」,强调重视人工智能「先天因素」

原文来源&#xff1a;arXiv作者&#xff1a;Gary Marcus「雷克世界」编译&#xff1a;嗯~是阿童木呀纽约大学Gary Marcus教授一直是深度学习的反对者&#xff0c;他认为深度学习并没有主动学习能力&#xff0c;且鲁棒性较差。同时&#xff0c;他始终认为人工智能应该多在“先天…

oracle10g新建数据,Oracle10g手工创建数据库

【注&#xff1a;本文中所有$表示在oracle用户中操作的命令、SQL>表示所有SQL语句】手工建库步骤&#xff1a;1、删除原有的数据库&#xff0c;如TEST命令&#xff1a;SQL> shutdown immediate;SQL> startup mount;SQL> alter system enable restricted session;SQ…

JPA和事务管理2

JPA和事务管理 很重要的一点是JPA本身并不提供任何类型的声明式事务管理。如果在依赖注入容器之外使用JPA&#xff0c;事务处理必须由开发人员编程实现。 UserTransaction utx entityManager.getTransaction(); try { utx.begin(); businessLogic();utx.commit(); } catch(…

oracle中 使用不了,Oracle 中不使用NOT IN 和 NOT EXISTS的另一种方法

用LEFT JOIN 代替NOT IN 或 NOT EXISTS&#xff1a;SQL> conn scott/tigerConnected.SQL> CREATE TABLE testa2 (3 id number,4 value varchar2(10)5 );Table created.SQL> INSERT INTO testa VALUES(1,a);1 row created.SQL> INSERT INTO testa VALUES(2,b)…

展望:模型驱动的深度学习

来源&#xff1a;《国家科学评论》概要&#xff1a;近年来&#xff0c;深度学习在人工智能领域一系列困难问题上取得了突破性成功应用。模型驱动的深度学习方法近年来&#xff0c;深度学习在人工智能领域一系列困难问题上取得了突破性成功应用。例如用于人脸识别已高于人的正确…