Java调用shell脚本要注意工作目录
2013-01-29 11:49
447 查看
最近在一个web项目中要调用shell脚本,
把当天生产的一个文件推送到另一台机器上去,
脚本内容大致如下:
java程序片段如下:
手动执行脚本时没有任何问题,
但是通过Runtime.exec执行是却总是看不到不到结果,
copy.log里也没有任何信息。
后来把脚本改成如下:
再次调用脚本,
/path/from/目录下确实生成了some.gz文件,
但是没有hello.gz,
而且 copy.log 里也没有我直接 echo 的信息。
后来转到 tomcat/bin 目录下发现了 copy.log 和 hello.gz。
原来是工作目录的原因,
第一个脚本里的文件用的是相对路径,
java web 程序调用时的工作目录是 tomcat/bin,
在tomcat/bin下自然找不到 yyyy_MM_dd_some.gz,
而且错误信息日志 copy.log也在 tomcat/bin中,
所有在 /path/from 下的copy.log里自然找不到错误信息。
解决方案有二:
0,在脚本里写绝对路径
1,java调用脚本时传递工作目录(我猜的,没测试不知好不好使)(经测试,可用!)
把当天生产的一个文件推送到另一台机器上去,
脚本内容大致如下:
#!/bin/bash for i in `cat aa` do date=`date +%Y_%m_%d` file=${date}_some.gz /bin/cp $file some.gz >> copy.log 2>&1 && /usr/bin/scp some.gz admin@192.168.3."$i":/path/to/go >> copy.log 2>&1 sleep 0.1 done
java程序片段如下:
Process pid = null; String[] cmd = {"/bin/sh", "-c", shellCommand}; //执行Shell命令 return Runtime.getRuntime().exec(cmd).waitFor();
手动执行脚本时没有任何问题,
但是通过Runtime.exec执行是却总是看不到不到结果,
copy.log里也没有任何信息。
后来把脚本改成如下:
#!/bin/bash echo "Start" >> copy.log path="/path/from/" target="some.gz" source="$(date +%Y_%m_%d)_${target}" /bin/cp -vf "${path}${source}" "${path}${target}" >> copy.log 2>&1 if [ $? -eq 1 ] then exit 1 fi /bin/cp -vf "${path}${target}" hello.gz >> copy.log 2>&1 if [ $? -eq 1 ] then exit 1 fi echo "End" >> copy.log
再次调用脚本,
/path/from/目录下确实生成了some.gz文件,
但是没有hello.gz,
而且 copy.log 里也没有我直接 echo 的信息。
后来转到 tomcat/bin 目录下发现了 copy.log 和 hello.gz。
原来是工作目录的原因,
第一个脚本里的文件用的是相对路径,
java web 程序调用时的工作目录是 tomcat/bin,
在tomcat/bin下自然找不到 yyyy_MM_dd_some.gz,
而且错误信息日志 copy.log也在 tomcat/bin中,
所有在 /path/from 下的copy.log里自然找不到错误信息。
解决方案有二:
0,在脚本里写绝对路径
1,java调用脚本时传递工作目录(我猜的,没测试不知好不好使)(经测试,可用!)
相关文章推荐
- 利用shell脚本批量提取idea工作目录下的.java文件
- Java调用shell脚本
- Java调用shell脚本并获得结果
- java调用linux中的shell脚本并返回执行结果
- [转载]JAVA调用Shell脚本
- java调用shell脚本,并获得结果集的例子
- 在java程序中如何调用linux的命令?如何调用shell脚本呢?
- java 远程调用shell脚本
- java jsp调用shell(带参数)脚本并返回值
- 工作中遇到的shell脚本知识(2)-不注意的用法
- QT中QProcess调用命令行的痛苦经历(调用Winrar,设置工作目录,获得输出,注意引号与括号,等等)
- java调用linux中的shell脚本
- shell脚本调用java程序
- java调用shell脚本执行操作
- 如何在java程序中调用linux命令或者shell脚本
- Linux中,shell脚本调用java程序模板
- linux中java调用shell脚本
- 如何在java程序中调用linux命令或者shell脚本
- java 远程调用shell脚本demo
- 配置crontab定时执行调用java程序的shell脚本遇到的问题