Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA-.sh文件从终端执行,但不通过JAVA代码执行_Java_Shell_Sh - Fatal编程技术网

JAVA-.sh文件从终端执行,但不通过JAVA代码执行

JAVA-.sh文件从终端执行,但不通过JAVA代码执行,java,shell,sh,Java,Shell,Sh,我有一个JAVA代码来创建和执行.sh文件。问题是-.sh文件正在创建中,但没有通过JAVA代码执行。当从终端或cronjob手动运行时,它会被执行。最大的问题是-相同的代码在所有开发服务器上都可以正常工作,但在CentOS 6.8的客户端PROD环境中却不能。它在CentOS 6.5的客户端UAT环境中也运行良好 代码在应用服务器上创建可执行的sh文件并执行它。sh文件包含命令sqlldr和sqlplus,用于通过批量上传机制上传数据。成功执行后,将创建一个日志文件,其中包含执行的输出。任何类

我有一个JAVA代码来创建和执行.sh文件。问题是-.sh文件正在创建中,但没有通过JAVA代码执行。当从终端或cronjob手动运行时,它会被执行。最大的问题是-相同的代码在所有开发服务器上都可以正常工作,但在CentOS 6.8的客户端PROD环境中却不能。它在CentOS 6.5的客户端UAT环境中也运行良好

代码在应用服务器上创建可执行的sh文件并执行它。sh文件包含命令sqlldr和sqlplus,用于通过批量上传机制上传数据。成功执行后,将创建一个日志文件,其中包含执行的输出。任何类似的错误都会写入日志文件。不执行sh文件时,也不会创建日志文件。从终端手动执行时,将执行sh文件并创建日志文件。下面是sh文件的内容

sqlldr user/pass@db CONTROL=CTL_1000004453.ctl silent=all
echo -e "UPDATE QT_BATCH_UPLOAD SET UPLOAD_STATUS = 20 WHERE UPLOAD_ID = 1000004453;
commit;
exit;
" > SET_STATUS_1000004453.SQL
sqlplus user/pass@db @SET_STATUS_1000004453.SQL
在应用程序和服务器日志中未获取任何错误。应用程序正在Weblogic服务器上运行。我已检查并消除了所有与权限相关的问题

如果有人遇到过此类非复制问题,请提供帮助

下面是代码

        try
        {

          Runtime rt = Runtime.getRuntime();
          Process pr = rt.exec(new String[] { "/bin/bash", "-c", "cd " + path + " ;chmod a+x " + exeFile + "; sh " + exeFile + ";" });

          BufferedReader br = new BufferedReader(new InputStreamReader(pr.getInputStream()));

          FileOutputStream file3 = new FileOutputStream(path + "CONSOLE_" + uploadID + ".LOG");
          String line; while ((line = br.readLine()) != null) { String line;
            System.out.println(line);
            file3.write((line + System.getProperty("line.separator")).getBytes());
            file3.flush();
          }
          file3.close();

        }

这个问题已经解决了。代码无需更改。实际上,应用服务器Weblogic是通过控制台运行的。我做了一些研发,并要求客户通过putty/terminal运行它,post,代码运行良好


当weblogic通过控制台运行时,我仍然会寻找解决方案来实现同样的效果。

请查看该网站的工作原理,这里的主题有哪些问题,以及相应的问题。另请参见:另外,当你让它工作时,不要这样做。在这里,您具有相当于SQL注入漏洞的bash漏洞,例如,如果exeFile为/;rm-rf/@AndyTurner我会调查一下,但是你能帮我先把它做好吗?