【问题标题】:How do I restart my Unicorn server?如何重新启动我的独角兽服务器?
【发布时间】:2016-08-16 11:52:23
【问题描述】:

我有一台运行 Unicorn 和 nginx 的服务器。我刚刚完成了git pull 以获取我自己代码的最新更新,现在我需要重新启动它。

在设置过程中,我遵循this guide,并做了以下步骤:

启动独角兽

cd /var/www/my_server

unicorn -c unicorn.rb -D

重启nginx

service nginx restart

我现在需要知道如何重新启动它。理想情况下,这应该是一个快速的过程,以便我的服务器在将来执行此操作时不会有任何/太多停机时间。

编辑:我尝试了其他地方建议的其他一些方法,例如killall ruby,并重新启动了我的服务器。现在我已经完成了上述操作,它没有给我任何错误,但是当我尝试加载页面时,它没有响应,并且可能最终超时(尽管我没有留那么久)。如果我停止 nginx,它会说“连接被拒绝”,所以很明显 nginx 正在工作,但由于某种原因它无法连接到 Unicorn。

编辑:一时兴起,我只输入了unicorn,我的项目似乎有问题 - 缺少宝石。说得通。所以第一次编辑不再是问题,我仍然对最优雅的重新启动方式感兴趣。

【问题讨论】:

    标签: ruby nginx server sinatra


    【解决方案1】:

    您可以尝试向主进程发送 HUP 信号,这样做

     kill -HUP <processID>
    

    HUP - 重新加载配置文件并优雅地重新启动所有工作人员。 如果“preload_app”指令为假(默认),那么工人 重新启动时还将获取任何应用程序代码更改。如果 "preload_app" 为真,则应用程序代码更改将没有 影响;必须使用 USR2 + QUIT(见下文)来加载更新的代码 这个案例。重新加载应用程序时,+Gem.refresh+ 将 被调用,以便您的应用程序的更新代码可以重新拾取 安装了 RubyGems。不建议卸载 Unicorn 运行时您的应用程序所依赖的库, 因为重生的工人可能会在失败时进入产卵循环 加载一个已卸载的依赖项。

    如果您想了解更多关于独角兽信号的信息,您可以阅读更多here

    【讨论】:

    • 我认为 OP 想要优雅地重启 Unicorn,而不是 RELOAD 它
    • 现在,我已经尝试了一些其他的方法,但我的服务器现在已经关闭,所以任何重启 unicorn 都可以。我怎么知道进程 ID 是什么?
    • 我刚刚做了pgrep unicorn,但没有得到任何结果。
    • 尝试在你的 unicorn 的 conf 文件上执行 pid "/tmp/unicorn.pid",然后 kill -HUP $(/tmp/unicorn.pid)
    • 不要将 /tmp 作为您的生产中的 pid 文件
    【解决方案2】:

    我建议使用他们提供的初始化脚本

    一个示例初始化脚本与 unicorn 一起分发:
    http://unicorn.bogomips.org/examples/init.sh

    因为你有 upgrade 方法来照顾你 用例,以零停机时间重新启动应用程序。

    ...
    upgrade)
        if sig USR2 && sleep 2 && sig 0 && oldsig QUIT
        then
            n=$TIMEOUT
            while test -s $old_pid && test $n -ge 0
            do
                printf '.' && sleep 1 && n=$(( $n - 1 ))
            done
            echo
    
            if test $n -lt 0 && test -s $old_pid
            then
                echo >&2 "$old_pid still exists after $TIMEOUT seconds"
                exit 1
            fi
            exit 0
        fi
    ...
    

    【讨论】:

      【解决方案3】:

      在 Ubuntu 14.04 上尝试

      sudo service unicorn restart 
      

      如果您使用的是 capistrano 在 deploy.rb 中添加这个

      desc "Zero-downtime restart of Unicorn"
      task :restart, :except => { :no_release => true } do
        run "kill -s USR2 unicorn_pid"
      end
      

      【讨论】:

      • 为此我只收到unicorn: unrecognized service。我不相信我在使用 capistrano。
      猜你喜欢
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      • 2013-07-02
      • 2011-12-24
      • 2011-01-27
      • 2013-02-20
      相关资源
      最近更新 更多