免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: chouy
打印 上一主题 下一主题

请教关于JAVA在WIN下执行.BAT文件的问题. [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-03-27 11:09 |只看该作者
问题又来了!!

在LINUX下运行不正确!
单独运行脚本没有问题,但是调用时就不执行了。
LINUX下的脚本内容与WIN下的一样,就是改成SH脚本了。

论坛徽章:
0
12 [报告]
发表于 2006-03-27 16:58 |只看该作者
Linux下运行特别要注意shell脚本的环境变量问题。你通过java程序调用的shell脚本不一定继承你当前的环境变量。简单的方法就是在shell脚本里面用绝对路径引用

论坛徽章:
0
13 [报告]
发表于 2006-03-29 10:33 |只看该作者
又学到东西了

论坛徽章:
0
14 [报告]
发表于 2006-03-29 20:43 |只看该作者

LINUX下不能运行

直接运行脚本就可以执行并正常退出。
在LINUX下用JAVA调用SQLPLUS的脚本,不能正确执行。程序死着不动了,CPU利用率为 0 左右,进程里有JAVA。本来以为是环境变量在做怪,但在脚本中加入了设置环境变量的语句,使环境变量相同了,但还不能正确执行。只能强制退出!以下是程序和环境变量和代码、脚本。

调用脚本的JAVA程序代码:
import java.io.*;

public class testRebuild {
    public static void main(String[] args) {
        try {
            String command = "./rebuild";
            System.out.println("user.dir = " + System.getProperty("user.dir"));
            System.out.println("command : " + command);
            Process ps = Runtime.getRuntime().exec(command);
            InputStream in = ps.getInputStream();
            int c;
            while ((c = in.read()) != -1) {
                System.out.print((char) c);
            }
            in.close();
        } catch (Exception e) {
            System.out.println("rebuildDb() error");
            e.printStackTrace();
        }
    }
}


调用的脚本内容
export LD_LIBRARY_PATH=/home/oracle/product/9.2.0/lib:/lib:/usr/lib:/usr/local/lib
export SHLVL=2
unset XFILESEARCHPATH
unset NLSPATH
env > env.txt
cd imp-exp
echo "exporting......."
exp xxxx/xxxx@xxxx PARFILE=exp.cfg OWNER=GEGWWEN > xxx
######以下是个ORACLE命令,XXXX是连接的用户名密码什么的,隐了########
sqlplus xxxx/xxxx@xxxx  @./sql/generate-create-seq.sql
echo "export success, importing........"
exit 0


输出的 env.txt内容两种方法一样,都是
HOSTNAME=localhost.localdomain
PVM_RSH=/usr/bin/rsh
SHELL=/bin/bash
TERM=vt100
HISTSIZE=1000
SSH_CLIENT=192.168.2.54 2244 22
NLS_LANG=AMERICAN
SSH_TTY=/dev/pts/0
USER=oracle
LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:
LD_LIBRARY_PATH=/home/oracle/product/9.2.0/lib:/lib:/usr/lib:/usr/local/lib
ORACLE_SID=cdmadb
PVM_ROOT=/usr/share/pvm3
ORACLE_BASE=/home/oracle
PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/oracle/bin:/home/wanglin/env/jdk15/bin:/home/oracle/product/9.2.0/bin
MAIL=/var/spool/mail/oracle
PWD=/home/oracle/CompDB
INPUTRC=/etc/inputrc
LANG=zh_CN.GB18030
LAMHELPFILE=/etc/lam/lam-helpfile
ORACLE_TERM=xterm
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
HOME=/home/oracle
SHLVL=2
LD_ASSUME_KERNEL=2.4.1
LOGNAME=oracle
SSH_CONNECTION=192.168.2.54 2244 192.168.2.28 22
LESSOPEN=|/usr/bin/lesspipe.sh %s
ORA_NLS33=/home/oracle/product/9.2.0/ocommon/nls/admin/data
ORACLE_HOME=/home/oracle/product/9.2.0
G_BROKEN_FILENAMES=1
_=/bin/env

[ 本帖最后由 chouy 于 2006-3-29 20:57 编辑 ]

论坛徽章:
0
15 [报告]
发表于 2006-03-29 20:48 |只看该作者
你知道程序执行到哪一句卡住的吗?既然你说env.txt是一样的,那么就是说至少执行了env>env.txt了,那么后面呢?

export LD_LIBRARY_PATH=/home/oracle/product/9.2.0/lib:/lib:/usr/lib:/usr/local/lib
export SHLVL=2
unset XFILESEARCHPATH
unset NLSPATH
env > env.txt
cd imp-exp
echo "exporting......."
exp system/leadtone@cdmadb PARFILE=exp.cfg OWNER=GEGWWEN > xxx
######以下是个ORACLE命令,XXXX是连接的用户名密码什么的,隐了########
sqlplus xxxx/xxxx@xxxx  @./sql/generate-create-seq.sql
echo "export success, importing........"
exit 0

[ 本帖最后由 perryhg 于 2006-3-29 20:50 编辑 ]

论坛徽章:
0
16 [报告]
发表于 2006-03-29 20:51 |只看该作者

接13楼贴

接13楼贴!!!!
如果不用EXPORT等,脚本:
env > env.txt
cd imp-exp
echo "exporting......."
exp system/leadtone@cdmadb PARFILE=exp.cfg OWNER=GEGWWEN > xxx
######以下是个ORACLE命令,XXXX是连接的用户名密码什么的,隐了########
sqlplus xxxx/xxxx@xxxx  @./sql/generate-create-seq.sql
echo "export success, importing........"
exit 0

环境变量:
HOSTNAME=localhost.localdomain
PVM_RSH=/usr/bin/rsh
SHELL=/bin/bash
TERM=vt100
HISTSIZE=1000
SSH_CLIENT=192.168.2.54 2244 22
NLS_LANG=AMERICAN
SSH_TTY=/dev/pts/0
USER=oracle
LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01r=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:
LD_LIBRARY_PATH=/home/oracle/product/9.2.0/lib:/lib:/usr/lib:/usr/local/lib
ORACLE_SID=cdmadb
PVM_ROOT=/usr/share/pvm3
ORACLE_BASE=/home/oracle
PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/oracle/bin:/home/wanglin/env/jdk15/bin:/home/oracle/product/9.2.0/bin
MAIL=/var/spool/mail/oracle
_=/bin/env
PWD=/home/oracle/CompDB
INPUTRC=/etc/inputrc
LANG=zh_CN.GB18030
LAMHELPFILE=/etc/lam/lam-helpfile
ORACLE_TERM=xterm
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
HOME=/home/oracle
SHLVL=2
LD_ASSUME_KERNEL=2.4.1
LOGNAME=oracle
SSH_CONNECTION=192.168.2.54 2244 192.168.2.28 22
LESSOPEN=|/usr/bin/lesspipe.sh %s
ORA_NLS33=/home/oracle/product/9.2.0/ocommon/nls/admin/data
ORACLE_HOME=/home/oracle/product/9.2.0
G_BROKEN_FILENAMES=1

用JAVA调用脚本的环境变量
HOSTNAME=localhost.localdomain
PVM_RSH=/usr/bin/rsh
SHELL=/bin/bash
TERM=vt100
HISTSIZE=1000
SSH_CLIENT=192.168.2.54 2244 22
NLS_LANG=AMERICAN
SSH_TTY=/dev/pts/0
USER=oracle
LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01r=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:
LD_LIBRARY_PATH=/home/wanglin/env/jdk15/jre/lib/i386/client:/home/wanglin/env/jdk15/jre/lib/i386:/home/wanglin/env/jdk15/jre/../lib/i386:/home/oracle/product/9.2.0/lib:/lib:/usr/lib:/usr/local/lib
ORACLE_SID=cdmadb
PVM_ROOT=/usr/share/pvm3
ORACLE_BASE=/home/oracle
NLSPATH=/usr/dt/lib/nls/msg/%L/%N.cat
PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/oracle/bin:/home/wanglin/env/jdk15/bin:/home/oracle/product/9.2.0/bin
MAIL=/var/spool/mail/oracle
_=/bin/env
PWD=/home/oracle/CompDB
INPUTRC=/etc/inputrc
LANG=zh_CN.GB18030
LAMHELPFILE=/etc/lam/lam-helpfile
XFILESEARCHPATH=/usr/dt/app-defaults/%L/Dt
ORACLE_TERM=xterm
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
HOME=/home/oracle
SHLVL=2
LD_ASSUME_KERNEL=2.4.1
LOGNAME=oracle
SSH_CONNECTION=192.168.2.54 2244 192.168.2.28 22
LESSOPEN=|/usr/bin/lesspipe.sh %s
ORA_NLS33=/home/oracle/product/9.2.0/ocommon/nls/admin/data
ORACLE_HOME=/home/oracle/product/9.2.0
G_BROKEN_FILENAMES=1

论坛徽章:
0
17 [报告]
发表于 2006-03-29 21:05 |只看该作者

回14楼的话

回14楼 perryhg :
停在exp这句。
就是env下面的。
exp 这句把话打到了xxx文件,这个文件为空,什么都没有,直接执行脚本也没有东东。

论坛徽章:
0
18 [报告]
发表于 2006-03-30 03:00 |只看该作者
这段尽可能写上完整的path看看呢?

cd /home/xxx/imp-exp
echo "exporting......."
/opt/xxx/bin/exp xxxx/xxxx@xxxx PARFILE=exp.cfg OWNER=GEGWWEN > xxx
######以下是个ORACLE命令,XXXX是连接的用户名密码什么的,隐了########
/opt/oracle/bin/sqlplus xxxx/xxxx@xxxx  @home/xxx/sql/generate-create-seq.sql

另外,我还不是很了解exp这句有什么用的,只是生成一个临时文件用吗?

论坛徽章:
0
19 [报告]
发表于 2006-03-30 13:14 |只看该作者
这句我也不太清楚,是别人写的,是个oracle命令。
我这个脚本的主要功能是把ORACLE的一个库导出来,包括表结构和数据。
至于哪句做什么就不知道了。

论坛徽章:
0
20 [报告]
发表于 2006-03-30 15:23 |只看该作者
这个无所谓啊,你在命令行下面输入which exp 就知道它在哪个path下面了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP