【问题标题】:How do I stop a uWSGI server after starting it?如何在启动 uWSGI 服务器后停止它?
【发布时间】:2016-08-14 01:35:08
【问题描述】:

我有一个使用 uwsgi 运行的 Python 金字塔应用程序,如下所示:

 sudo /finance/finance-env/bin/uwsgi --ini-paste-logged /finance/corefinance/production.ini

一旦它运行并且我的窗口超时,我无法在不重新启动整个机器的情况下停止服务器。如何停止服务器?

【问题讨论】:

  • 你无法阻止天网。

标签: pyramid uwsgi


【解决方案1】:

如果在启动命令中添加 --pidfile 参数

 sudo /finance/finance-env/bin/uwsgi --ini-paste-logged /finance/corefinance/production.ini --pidfile=/tmp/finance.pid

您可以使用以下命令停止它

sudo /finance/finance-env/bin/uwsgi --stop /tmp/finance.pid

您也可以使用以下命令重新启动它

 sudo /finance/finance-env/bin/uwsgi --reload /tmp/finance.pid

【讨论】:

  • 太棒了!多谢。大多数人忘记运行使用 ini 文件配置的第一个命令。 sudo /finance/finance-env/bin/uwsgi --ini-paste-logged /finance/corefinance/production.ini --pidfile=/tmp/finance.pid
  • 很高兴知道:--stop 这里的命令不是优雅停止。 --reload 是优雅的重新加载。更多:github.com/unbit/uwsgi/issues/849
【解决方案2】:

您可以使用标准 Linux 命令杀死 uwsgi 进程:

killall uwsgi

# ps ax|grep uwsgi
12345
# kill -s QUIT 12345

后一个命令允许您优雅地重新加载或立即终止您发送的整个堆栈depending on the signal

但是,您使用的方法通常不会在生产中使用:通常您会告诉操作系统在启动时启动您的应用程序,并在应用程序崩溃时重新启动它。否则,您一定会在最不方便的时候得到惊喜 :) Uwsgi 文档有 examples 用于 Upstart/Systemd 的启动脚本/作业。

还要确保你没有真正以 root 身份运行 uwsgi - 命令中的 sudo 让我畏缩,但我希望你的 production.ini 中有 uid/gid 选项,以便 Uwsgi 更改有效启动时的用户。以 root 身份运行网络服务器绝不是一个好主意。

【讨论】:

  • 不幸的是,在没有 sudo 的情况下运行命令给了我“bind(): Permission denied [core/socket.c line 769]”
  • @JeremyT: 你需要root 才能绑定到低于 1024 的端口。在这种情况下,你需要确保 uWSGI 在启动后放弃特权(即它更改为非特权用户 ID ) 通过在配置或命令行中指定 uidgid 选项。
  • 那么,您是说不使用 sudo 的情况下尝试弄清楚如何启动进程更好,还是我应该使用 sudo 并设置它以在启动后更改用户?
  • 如果服务器需要监听低于 1024 的端口,您必须以 root 身份启动它。但是应用程序需要删除权限(通过 uid/gid 参数)。我还建议通过 Systemd/Upstart 启动应用程序,在这种情况下,您将不需要 sudo
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多