0

我有一个 shell 脚本 test.sh :

cat /home/tomcat/temp/tempLogFile.log > /home/tomcat/temp/logFile_test.log

我通过 Runtime.getRuntime().exec("test.sh") 从 java 调用 test.sh

它创建 logFile_test.log 但没有写入任何内容。

如果我直接从 shell 运行脚本,它工作正常。可能出了什么问题?

谢谢,

更新:有趣的是,如果我这样做,它工作得很好

echo 'cat /home/tomcat/temp/tempLogFile.log > /home/tomcat/temp/logFile_test.log' | at now

但我不能使用at now,因为我需要等待 cat 完成

4

2 回答 2

0

也许你的命令路径搞砸了?该命令将创建 logFile_test.log 即使它无法运行cat程序。尝试添加类似:

set > /tmp/dump.txt

到 shell 脚本。这会将进程的环境变量的副本写入/tmp/dump.txt. 检查这些可能会帮助您找出问题所在。

另一种可能是磁盘已满。在这种情况下,您可以创建空文件,但不能向其中写入任何数据。

于 2012-08-17T01:33:50.667 回答
0

一旦调用getRuntime().exec("ANY_COMMAND");,它会返回一个 Process 实例,使用 process 对象,您可以获得输入和输出流,然后将任何其他命令传递给同一进程或读取输出,为此您连接了三个流

  1. 输出流:- 让您控制向同一进程发送更多参数或命令
  2. 输入流:- 让您控制从进程的标准输出中读取值
  3. 错误流:- 为您提供在执行任何命令期间发生的所有错误。

即使您有任何错误,您也可以检查错误流并查看发生了什么问题。

你可以参考Java process.getInputStream() has nothing to read, deadlocks child

于 2012-08-17T02:20:21.190 回答