首页 > 解决方案 > 为什么使用和运算符不执行 rake 任务?

问题描述

我有一个 rake 任务:

task :kill_process do
  system %q(ps -ef | awk '{if($8~"java" || $8~"glassfish" || $8~"ruby" || $8~"god" || $8~"couch"){printf("Killing : %s \n",$2);{system("kill -9 "$2)};}}')
end

这基本上是杀死进程。这个任务是另一个 rake 任务的一部分:

desc "stop the entire system"
task :stop => [...., :kill_process]

还有一个任务:

desc "start the entire system"
task :start => [....]

当我在做rake stop && rake start 停止任务时成功执行。但 rake start 没有执行。

如果我分别执行这两个任务,那么它工作正常。但不在rake stop && rake start

在这里使用 exec 函数或系统或任何其他会更好,请建议我。

我唯一的要求是在rake stop. 但它也不应该影响其他事情,比如rake stop && rake start应该可以正常工作。

标签: rubyrake-taskrakefile

解决方案


如评论中所述,退出代码的137计算结果为 false,因此其他部分&&不会被执行。这其中的原因大概是kill -9

现在有几个选择。

  1. 从您的 rake 任务中返回 0,例如exit(0)
  2. 不要使用kill -9
  3. 创建restart确实执行但在逻辑上不依赖于彼此的命令stopstart&&

推荐阅读