从Gradle运行后台作业

maa*_*nus 5 background-process gradle

我创建了一个任务,开始像这样的远程工作

task mytask(type: Exec) {
    commandLine 'ssh'
    args '-f -l me myserver ./start'.split(' ')
}
Run Code Online (Sandbox Code Playgroud)

并且它有效,但是,它似乎在等待作业终止。但是它永远不会终止,也不会终止。

在命令行中执行相同的操作是有效的:由于进行了-f切换,因此ssh命令在后台执行。

我尝试将'>&' /dev/null(csh stdout和stderr redirect)添加到命令行,但是没有成功。同样显而易见的&是什么也没做。我还将命令行提取到脚本中,并且始终相同:Gradle等待终止。

我已经通过使用脚本并在脚本中同时重定向stdout和stderr来解决了该问题。我的问题来自于令人困惑的重定向……通过传递,'>&' /dev/null我重定向了远程计算机上的流,但是需要的是在本地计算机上进行重定向(即,不将重定向操作符放在引号中)。

Ton*_*tte 6

Exec任务始终等待终止。要运行后台作业,请使用Ant任务“ Exec”

ant.exec(
  executable: 'ssh',
  spawn: true
) {
   arg '-f'
   arg '-l'
   arg 'me'
   arg 'myserver'
   arg './start'
}
Run Code Online (Sandbox Code Playgroud)


Pet*_*ser 4

任务Exec总是等待终止。要运行后台作业,您需要编写自己的任务,例如可以使用 Java ProcessBuilderAPI。