我非常需要我的问题陈述所说的,目前我的 Capistrano任务看起来像这样:
desc "stops private pub"
task :stop_private_pub do
run "kill -9 $(lsof -i:9292 -t)"
end
before 'deploy', 'servers:stop_private_pub'
...实际上端口9292 中的进程正在运行时效果很好,问题是当进程未运行时此任务将失败!它停止了整个部署过程!
我不是UNIX Shell专家,也不是Capistrano大师,所以..我真的需要帮助改进这个Capistrano任务,有没有办法 kill -9 只有如果进程正在运行?
我该怎么做?
提前致谢。
答案 0 :(得分:4)
您可以使用Capistrano的capture
命令(至少在V3中,可能是V2等效命令)从您的lsof命令中获取输出,然后仅在您获得PID运行kill命令时才会使用。
pid = capture 'lsof', '-i:9292', '-t'
if pid # ensure it's valid here
run "kill -9 #{pid}" # make darn sure pid is an integer if you embed it
end
答案 1 :(得分:2)
你也可以这样做:
run "kill -9 $(lsof -i:9292 -t); true"
或添加错误继续:
task :stop_web, :roles => :app, :on_error => :continue do
run "dosomething.sh; true"
end