如何让Ant任务“SSHExec”运行命令并在完成之前退出?


How can I make the Ant task “SSHExec” run a command and exit before it's completed?

我有一个Ant构建脚本,它连接到远程服务器并使用sshexec启动本地构建。这个构建大约需要1分钟,完成后它会向我发送一封电子邮件,但我有一个Ant任务:

1
2
3
4
5
6
<sshexec
   host="${deploy.host}"
   username="${deploy.username}"
   trust="true"
   keyfile="${user.home}/.ssh/id_rsa"
   command="~/updateGit.sh"/>

将等待脚本完成。我试图传递一个这样的&(我假设必须在build.xml中进行转义):

1
2
3
4
5
6
<sshexec
   host="${deploy.host}"
   username="${deploy.username}"
   trust="true"
   keyfile="${user.home}/.ssh/id_rsa"
   command="~/updateGit.sh &amp;"/>

但这似乎没什么区别。如果这个额外的细节对任何人都有帮助,脚本会生成大量的输出,并且缓慢的互联网连接会导致脚本花费更长的时间(因为它的输出正在被管道返回,这种方法的假设是,我只关心输出完成后的输出,所以如果我将其打包到电子邮件中,我可以在构建时监视我的收件箱,从而获得好处关闭,基本上是穷人的持续整合)


使用这个答案(和nohup命令)中的信息,我更新了我的任务,如下所示:

1
2
3
4
5
6
<sshexec
  host="${deploy.host}"
  username="${deploy.username}"
  trust="true"
  keyfile="${user.home}/.ssh/id_rsa"
  command="nohup ~/updateGit.sh &gt; /dev/null 2&gt; error.log &lt; /dev/null &amp;"/>