免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2209 | 回复: 7
打印 上一主题 下一主题

[求助]一个使用Runtime()方法的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-22 22:31 |只看该作者 |倒序浏览
在使用Runtime()方法的时候,
Runtime.getRuntime().exec("cmd.exe","/c start notepad.exe"
可以在windows下启动记事本

请问在unix 平台下,如何使用Runtime()方法来启动一个系统命令呢?
方法中的几个参数应该怎样配置?
Process exec(String command,  String[] envp,  File dir)

主要是中间的这个环境,怎么设置啊?

我说的有些混乱,我具体遇到的情况是:
我需要运行一条命令:
asnapply CONTROL_SERVER=JW1 APPLY_QUAL="JW_APP0" APPLY_PATH="/home/db2inst1/replicate.log"

  这是IBM DB2 II 中启动复制的一条命令,这条命令是需要在AIX的系统提示符下来运行的,现在我需要把这条命令放在程序中来自动执行,可是不知道怎么做?
  目前我是这样做的:
str="asnapply CONTROL_SERVER=JW1 APPLY_QUAL="JW_APP0" APPLY_PATH="/home/db2inst1/replicate.log"
"
File h_file = new File("/home/db2inst1/sqllib";
Runtime.getRuntime().exec(str,null,h_file);

这样用问题在哪里呢?
并且如果我在windows下来调试这个程序肯定是不行的吧,如果我想使这个程序在远程执行,怎么调试呢?

希望大家多多指导啊,我快被这个问题逼疯了!

论坛徽章:
0
2 [报告]
发表于 2005-08-23 09:09 |只看该作者

[求助]一个使用Runtime()方法的问题

一个比较偷懒的方法是把命令放在一个shell文件里。然后执行这个shell文件。

关于环境变量,我一般都是不使用这个方式,而是:
Runtime.getRuntime().exec(cmdStr);

至于调试,只能把java class上传到AIX上调试,在windows上肯定是调试不了了。

论坛徽章:
0
3 [报告]
发表于 2005-08-23 14:43 |只看该作者

[求助]一个使用Runtime()方法的问题

这个命令不能写在shell里,里面的参数是变化的啊

我把程序简化了一下:
public class TestApply {

  public static void main(String args[]) throws IOException{
  
    String str = "asnapply CONTROL_SERVER=yang APPLY_QUAL=\"JW_APP1\" APPLY_PATH=\"/home/db2inst1/replicate.log\"";
    //File h_file = new File("/home/db2inst1/sqllib";
    File h_file = new File("/usr/opt/db2_08_01/bin";
    System.out.println(str);
    Runtime.getRuntime().exec(str, null, h_file);
}
}
这样编译没有错误,运行的时候报如下错误:
Exception in thread "main" java.io.IOException: asnapply: not found
        at java.lang.UNIXProcess.forkAndExec(Native Method)
        at java.lang.UNIXProcess.<init>;(UNIXProcess.java:156)
        at java.lang.Runtime.execInternal(Native Method)
        at java.lang.Runtime.exec(Runtime.java:56
        at java.lang.Runtime.exec(Runtime.java:433)
        at cn.edu.bjut.CIS.zhuce.TestApply.main(TestApply.java:14)

为什么没有找到asnapply呢,我给了路径的啊,中间的那个环境变量要不要配置一下呢?
以前没有遇到过这样的问题,望高手赐教!
学JAVA也没有多久,好多问题不理解呢!

论坛徽章:
0
4 [报告]
发表于 2005-08-24 02:40 |只看该作者

[求助]一个使用Runtime()方法的问题

看这个例子,应该对你有帮助的
http://www.javaalmanac.com/egs/java.lang/Exec.html

论坛徽章:
0
5 [报告]
发表于 2005-08-24 08:38 |只看该作者

[求助]一个使用Runtime()方法的问题

你把环境变量给设置成null了。可执行文件自然就找不到了。

为什么一定要指定环境变量为null呢?

另外你的参数里哪个是可变的?

论坛徽章:
0
6 [报告]
发表于 2005-08-24 09:59 |只看该作者

[求助]一个使用Runtime()方法的问题

写全PATH

论坛徽章:
0
7 [报告]
发表于 2005-08-25 22:57 |只看该作者

[求助]一个使用Runtime()方法的问题

这个问题我基本已经解决了,首先是确定了不能正确执行是因为权限的问题。因为我要执行的命令需要在db2inst1用户下,root权限不能执行这个命令,好像配了环境变量也不行。
明确了这个问题后,想办法在db2inst1下执行命令就行了。
因为这个命令是在网页上调用的,默认的用户就是root,不明白这里是为什么啊?
所以在执行命令前要先su到db2inst1:
su - db2inst1 -c "command"

这条命令放在Runtime.getRuntime.exec("su - db2inst1 -c "command""
不知道为什么不能执行,这个还没弄明白
所以就把命令放在shell里了,传入我要的参数,成功!
不过我觉得这样好像挺笨的,还有什么更好的办法吗?
我把问题放在这里希望大家能够共享一下,学JAVA没多久,还希望各位多多指导!   

论坛徽章:
0
8 [报告]
发表于 2005-08-26 02:43 |只看该作者

[求助]一个使用Runtime()方法的问题

1. 你的tomcat不一定是root启动的,而且也不推荐用root启动,权限太高会导致安全隐患。

2. 即使你的tomcat是root启动的,也不一定自动继承普通登录用户的所有环境变量,有些变量还是要另外设置。如果你用的jdk5的话,可以动态设置Process的环境变量。

3. Process只能一次输入参数或者一次动读出结果,不能执行su之类有输出/输出交互的程序。原因我以前讲过了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP