如何手动重启Unicorn

16

当我运行cap deploy时,我不确定独角兽是否正确地重新启动了,因为某些更改在应用程序中没有展示出来,因此我想手动在远程服务器上重启独角兽。我已经进入了etc/init.d并查看了unicorn_myapp的列表,但它不是一个目录(即我无法cd进入它)。基于我的deploy.rb文件中下面的代码,我能从这里做些什么来重新启动独角兽吗?

我尝试执行run unicorn_myapp restart,但它说run不是一个命令。

namespace :deploy do
  %w[start stop restart].each do |command|
    desc "#{command} unicorn server"
    task command, roles: :app, except: {no_release: true} do
      run "/etc/init.d/unicorn_#{application} #{command}"
    end
  end

1
FYI 这里的答案都是错误的。 - Darth Egregious
3个回答

32

你没有列出操作系统。但以下其中一个应该会起作用。

你需要成为root用户/使用sudo。

/etc/init.d/unicorn_myapp restart 


/etc/init.d/unicorn_myapp stop 
/etc/init.d/unicorn_myapp start 


service unicorn_myapp restart

service unicorn_myapp stop
service unicorn_myapp start

先尝试重新启动版本,但根据初始化脚本的编写方式,可能没有重启命令。如果这样不起作用,您可以执行停止/启动版本。


28

另外,与依赖于操作系统的 /etc/init.d... 脚本不同,重新启动 unicorn 的简单方法是向其主进程发送 HUP (1) 信号。

以下是一个示例,演示了如何通过 post-receive 钩子在 git push 后自动重新加载应用程序:

#!/bin/sh
unicorn_pid=`cat /tmp/pids/unicorn.pid`
echo "Restarting Unicorn ($unicorn_pid)"
kill -HUP $unicorn_pid
在你的情况下,/etc/init.d/unicorn_myapp restart脚本可能会执行这个操作。检查unicorn.conf以获取其pidfile的位置。
更多细节请参见独角兽SIGNALS文档

FYI,相对路径 tmp/pids... 是有意的,而不是打字错误...我的 Git 钩子在项目路径中运行,其中包含一个本地的 tmp 文件夹...无论如何! :) - Vincent Guerci
在“kill -HUP $unicorn_pid <running PID>”之后还需要一个进程ID。 - kamal

6

您可能需要root权限,但只需执行 /etc/init.d/unicorn_myapp restart 即可(不要包含 run,因为它不是一个shell命令)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接