独立地从Java应用程序执行shell脚本

时间:2009-05-14 19:40:45

标签: java shell

我有一个java应用程序,它包含一个Thread,它监视数据库中包含要执行的shell脚本的表。我每隔几秒钟查看数据库。对于脚本,执行它(通过Process类),然后等待表中的另一个脚本。

我的问题是:有时,脚本中的某些命令失败。该线程捕获错误流并将其记录在数据库中。但是,它会不断记录消息,并且控件不会从脚本返回到Java线程,因为数据库中的后续shell脚本无法执行。

有解决方法吗?

1 个答案:

答案 0 :(得分:3)

您是否正在阅读标准输出标准错误?你是在单独的线程中做这个吗?根据您使用脚本输出的方式,可以阻止其中一个,我有一种预感,即您的脚本被阻塞,等待父进程使用其输出。

来自Process文档:

  

由于某些本机平台仅为标准输入和输出流提供有限的缓冲区大小,因此无法及时写入输入流或读取子进程的输出流可能导致子进程阻塞,甚至死锁

请参阅this question以及引用'stream gobblers'的示例代码。 2'gobbler'被创建,消耗标准输出和标准错误。