【问题标题】:What is the best way to stop a Unicorn Server process from running?阻止 Unicorn Server 进程运行的最佳方法是什么?
【发布时间】:2016-09-19 00:21:14
【问题描述】:

阻止 Unicorn Server 进程运行的最佳方法是什么?每当我尝试使用kill -p 90234 停止它时,它都不起作用。这很可能是我做错了什么。

谢谢。

【问题讨论】:

  • 不是编程。 ServerFault.com 可能。
  • 在 github 上有一些很好的 rake 任务可以包装 kill call - gist.github.com/1246503/…
  • 它不会立即停止或重新启动吗?如果它重新启动,那么类似 runit/upstart/monit/systemd 的东西正在启动它。

标签: ruby-on-rails


【解决方案1】:

看看Unicorn SIGNALS page。如果 master 行为正确而您只想将其关闭,则应发送 QUIT 信号:

kill -QUIT 1234     # where 1234 is the real process id, of course

这优雅地停止了所有工作人员,让他们完成他们正在服务的任何请求。

【讨论】:

  • 杀死当前进程:`kill -QUIT #{Process.pid}`
【解决方案2】:

我用这个:

ps aux | grep 'unicorn' | awk '{print $2}' | xargs sudo kill -9

两个月后我才回顾了这件事。这太疯狂了,如果你有多个独角兽大师并且只想杀死其中一个,请不要使用它。

【讨论】:

  • 如果你有一百万被吊死的孤儿工人,这很有效
【解决方案3】:

有趣的是没有人考虑独角兽创建的 pid 文件?我通常的配置将它放在 ./tmp/unicorn.pid 中,所以也许最安全的方法是

kill -QUIT `cat tmp/unicorn.pid`

然后 pid 文件会被离开的进程正确删除。我总是将 pid 文件放在同一个相对位置,所以我想我可以为方便起见起一个别名,尽管在开发时我通常不会守护独角兽。

【讨论】:

  • kill -QUIT cat shared/pids/unicorn.pid 是 PID 文件的另一个常见位置
  • 可以在 /config/unicorn/development.rb 中设置您的 pid 文件在开发中的位置:pid "tmp/pids/unicorn.pid"。然后```kill -QUIT `cat tmp/pids/unicorn.pid````
【解决方案4】:

我可能会选择:

sudo pkill unicorn_rails

【讨论】:

  • 我相信这是最好的答案,虽然我做了 sudo pkill unicorn
  • 如果你有多个独角兽服务器在运行并且你只想结束一个特定的服务器,那就不好了......
【解决方案5】:
ps aux | grep unicorn
#=> root   4393  2.0  0.9  65448 20764 ?  S  20:06   0:35 unicorn_rails m
kill 4393

【讨论】:

    【解决方案6】:

    最终,关键是以下行,它以主独角兽进程为目标并杀死它

    kill $(ps aux | grep '[u]nicorn_rails master' | awk '{print $2}')
    

    【讨论】:

      【解决方案7】:

      通常我很懒,我只是按名字杀人:

      $ killall processname
      

      【讨论】:

        【解决方案8】:

        简单的事情 - 在终端中输入“ps”并查看 Master Unicorn Process。复制它的 PID,然后输入“kill -9 90234”(其中 90234 是独角兽主进程的 PID)。之后,工作进程应该会自行消失。

        【讨论】:

        • kill -9 绝不是杀死正在运行的进程的安全方法。我建议 Rob Cameron 在下面回答。
        • 投了反对票。正如 Gewthen 所描述的,使用 -9 杀死会导致大量问题。 kill -QUIT 安全得多(根据 Rob Cameron 的回答)。
        【解决方案9】:

        对于那些使用 chef 并看到上述方法都不起作用的人(因为一旦你杀死它们,进程就会重新生成):

        sudo sv stop APP_NAME

        svrunit 的控件。

        【讨论】:

          【解决方案10】:

          要退出特定的 Unicorn 服务器,您可以使用以下内容:

          pkill -QUIT --pidfile /path/to/app/shared/tmp/pids/unicorn.pid
          

          通过这种方式,您可以选择性地终止任何进程,而不必使用可能不可用的 shell 评估/扩展。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-01-21
            • 1970-01-01
            • 1970-01-01
            • 2017-01-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多