Windows "Start" 命令不在 "Execute shell script" 步骤中 return

Windows "Start" command doesn't return from within "Execute shell script" step

在 kettle 作业中,我们需要调用一个程序,该程序在停止之前不会 return。从命令行可以使用 Windows:

Start 命令来完成

Start "some title" /b "C:\windows-style\path with spaces\program.exe" unqoted_param -i -s "quoted param"

通过在另一个 shell 中启动程序,而 shell 调用它 return 并可以继续,这会很好地工作。在 kettle 工作中,这也应该是可能的,我认为,只需 运行 上面的命令在 Execute a shell script 步骤中使用 Insert script 选项。

然而,不是 return 从 运行 中的程序在新的 shell 中执行,而是等待程序完成。这不是我们想要的,因为当程序处于 运行(它是一个 VPN 连接)时,我们需要在程序再次停止之前执行一些其他步骤。

我怀疑这可能与 kettle 执行脚本的方式有关,即将命令放入临时批处理文件,然后 运行 那个。至少在作业日志中是这样显示的:

2019/09/17 09:40:24 - Step Name - Executing command : cmd.exe /C "C:\Users\username\AppData\Local\Temp\kettle_69458258-d91e-11e9-b9fb-5f418528413ashell.bat"
2019/09/17 09:40:25 - Step Name - (stdout)
2019/09/17 09:40:25 - Step Name - (stdout) C:\pentaho_path>Start "some title" /b "C:\windows-style\path with spaces\program.exe" unqoted_param -i -s "quoted param"```

为了快速解决问题,您可以在作业中使用并行执行。

从“开始”步骤(或需要 VPN 之前的任何步骤),激活 运行 并行执行后续步骤的选项。然后你可以将 shell 脚本步骤放在它自己的分支中,而其余的工作可以继续(在另一个分支上等待步骤以允许 VPN 启动)。

从问题来看,您可能 运行正在从 Pentaho 服务器获取作业。如果你碰巧 运行 从调度程序 kitchen.bat 他们当然可以在调用 kitchen 之前启动 VPN。