我正在使用Capistrano来部署PHP应用程序。我正在尝试添加在完成后重新启动 Apache 的功能,但随后我的脚本挂起(我猜是因为它失去了与 Web 服务器的连接)。有没有办法发送service httpd restart
命令并返回而无需等待?这是我正在做的事情(相关部分)...
namespace :myapp do
task :restart_webserver do
#Show Start of Task
print "Restarting webserver..."
# Restart Web Server
run "service httpd restart"
# Show Green Check Mark on Completion
puts checkmark.gsub(/''u['da-f]{4}/i) { |m| [m[-4..-1].to_i(16)].pack('U') }.green
end
end
after "deploy","myapp:restart_webserver"
它在重新启动时挂起,然后我必须Ctrl+C
脚本才能结束。有什么方法可以使这种不阻塞吗?
由于我无法添加注释,因此应用程序以哪个用户身份运行?如果您以 root 用户身份登录,则此命令将正常工作。否则,您将需要通过 sudo 运行它,例如
run "#{sudo} service httpd restart"
并可能将 NOPASSWD:/sbin/service httpd* 添加到您的 sudoers 文件中。
您可能希望覆盖重新启动而不是 Web 挂钩:
namespace :deploy do
task :restart, :except => { :no_release => true } do
myapp.restart_webserver
end
end
另外,考虑在钩子后拧紧你:
在"部署:重新启动"、"MyApp:restart_webserver"之后