2012-03-09 115 views
2

我使用Ant,它基本上是一个Java程序,用于在Solaris上启动ksh(test.ksh)脚本。在这个ksh中,调用另一个启动程序的ksh(test1.ksh)脚本,我希望这个程序可以继续运行。为什么我的子任务在ant任务中被杀死?

Ant目标看起来就像这样:

<target name="start.loading.data.Global"> 
    <shellscript shell="ksh">./test.ksh</shellscript> 
    <sleep seconds="300"/> 
    </target> 

的问题是,我发现当蚂蚁的目标完成,该计划已被杀害。 我已通过添加

<sleep seconds="300"/> 

确认,因为从我的应用程序的日志,它可以运行约3分钟后,我补充睡眠,它可以运行约8分钟。

我在Ant脚本中使用

<parallel> 

尝试,但没有奏效。 我也尝试使用nohup启动ksh,但没有奏效。

有什么建议吗? 如果可能的话,请解释一下shell的工作原理。

+0

虽然你的问题在技术上是关于[unix.se]的话题,但它似乎主要是关于Ant,它是一个构建工具,因此它拥有更多的专业知识。所以你的问题已经转移到[so]。 – Gilles 2012-03-09 21:24:47

+0

这听起来像你的shell脚本test1.ksh正在完成,而不是像你期待的那样无限期运行。也许你应该在shell脚本中发布代码,或者解释一些你正在尝试做的事情。从目前的描述来看,似乎是一个壳问题。 – 2012-03-09 22:26:44

+0

您是否尝试在ksh文件名末尾添加'&':' ./ test.ksh&',这是一个很长的过程,但它可能会起作用。 – Michael 2012-03-26 15:43:48

回答

0

shellscript任务只是exec ant任务的扩展,根据documentation,它可以使用所有相同的属性。您可能需要添加菌种= TRUE这是exec属性之一,你的shell的任务是这样的:

<shellscript shell="ksh" spawn="true">./test.ksh</shellscript> 

菌种=真正应该引起shell脚本被设置为一个单独的进程,并能够活在java/ant进程完成后开启。