通过JSP / Servlet中的shell脚本运行java应用程序

时间:2009-10-15 15:54:43

标签: java web-applications shell

我正在通过Web应用程序运行shell脚本。这个shell脚本看起来像

`#! /bin/bash
user=""
pass=""
db_url=""
db_instance=""
sqlplus -s $user/$pass@$db_url/$db_instance @ ./SqlScripts/foo.sql
sqlplus -s $user/$pass@$db_url/$db_instance @ ./SqlScripts/bar.sql
CLASS_PATH="./lib/*"
java -classpath $CLASS_PATH package.Main ./Data/inputfile`

我正在使用ProcessBuilder来运行脚本,除了最后一行之外的所有内容都能正常运行。我通过jvm调用shell然后再次调用jvm运行应用程序来创建问题吗?

4 个答案:

答案 0 :(得分:1)

问题是脚本执行过程正在运行的环境。我更改了流程的一些环境变量,现在一切正常。该脚本最初是一个独立的shell脚本,但我为每个使用的数据库编写了一个脚本。为了控制工作流程,我为此编写了一个Web应用程序,它为每个脚本调用单独的线程并可以管理线程。感谢您的回复!

答案 1 :(得分:0)

父JVM和子JVM应该是单独的进程,没有特别的理由说明它们应该干扰。

你得到什么错误?

你的PATH上是java吗?

好的,添加更多问题以回应您的评论...

哪个帖子正在等待?想必是父母?

孩子java进程,你有没有证据证明是否成功实施了。我的猜测是,孩子在某种程度上被阻止了。如果你杀了孩子那么父母会恢复生机吗?

假设它是一个简单的“hello world”应用程序,那会起作用吗?

答案 2 :(得分:0)

通常,应用服务器在“洁净室”环境中运行其servlet - 例如为了安全起见,它们会剥离通常从外部设置的所有变量。尝试使用java二进制文件的完全限定路径,并尝试为CLASS_PATH变量设置完整/绝对路径。

答案 3 :(得分:0)

最有可能是这一行:

CLASS_PATH="./lib/*"

并且

$CLASS_PATH

它不会被进程构建器扩展,因为它通常是shell的工作,在这种情况下不会被调用。

尝试创建./lib/*的完整列表,并将其直接附加到脚本的最后一行。

java -classpath ./lib/a.jar:./lib/b.jar

旁注:

从java调用所有这些对我来说看起来很糟糕。我宁愿把它放在一个独立的脚本中,并通过其他方式调用它,但那就是我。