我在Jenkins中并行运行两个Perl脚本
some shell commands
perl script 1 &
perl script 2 &
wait
some more shell commands
如果其中一个perl脚本在执行过程中失败,则作业会一直等到另一个脚本运行(因为它在后台并行执行)。
我希望只要其中一个脚本失败就停止工作,而不是通过完成其他脚本的执行来浪费时间。
请帮忙。
答案 0 :(得分:0)
通常使用Jenkins,您可以将并行步骤作为单独的作业(或有时已知的项目)而不是作业中的步骤运行。这样就可以让步骤在不同的从机上并行运行,并将作业的输出保存在一个单独的位置。
然后你将有一个控制工作来运行其他部分。
我喜欢这类Multijob插件。
有些替代方案可能更适合,例如Build Flow Plugin使用DSL来描述您要运行的工作
答案 1 :(得分:0)
您为SIGCHLD设置了一个信号处理程序,这是一个在子进程退出时始终传递给父进程的信号。我不知道有哪种机制可以查看退出的子进程,但是您可以保存子进程进程标识符,并在收到SIGCHLD时将其全部删除:
some shell commands
perl script 1 &
pid1=$!
perl script 2 &
pid2=$!
trap "kill $pid1 $pid2" CHLD
wait
some more shell commands
上面的脚本的缺点是,无论子进程的退出状态如何,它都将终止其他脚本。如果您愿意,可以在陷阱中添加检查退出状态。子过程可以是例如如果成功,则创建一些临时文件,陷阱可以检查文件是否存在。