java bin目录 shell_Java调用shell脚本要注意工作目录 | 学步园

最近在一个web项目中要调用shell脚本,

把当天生产的一个文件推送到另一台机器上去,

脚本内容大致如下:

#!/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调用脚本时传递工作目录(我猜的,没测试不知好不好使)(经测试,可用!)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值