自定义shell脚本通过pid杀死uWSGI

时间:2014-02-05 00:50:10

标签: shell centos sh uwsgi

我要编写一个脚本来获取文件(/tmp/pidfile.txt)中的所有文本,这个文件只是一个pid编号,然后将其存储为变量(比如pidvar)或者其他东西并执行以下内容:

kill -2 pidvar 

看起来很简单我只是不知道如何从.txt文件中获取pid。我有python安装,如果这有帮助。为了更容易杀死uWSGI,欢迎任何有关替代方案的建议。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

你的问题的字面答案(使用bash扩展稍微有效)将是

kill -2 "$(</tmp/pidfile.txt)"

...或者,与POSIX sh兼容,但效率稍低......

kill -2 "$(cat /tmp/pidfile.txt)"

......但不要这样做。


pidfiles很容易出现竞争条件,而基于过程树的监督系统可以保证它们只能向正确的过程传递信号。

runitdaemontoolsUpstartsystemd以及许多其他替代品可用,可确保不会有基于以下信息向错误进程发送信号的风险陈旧的数据。 CentOS可能是没有附带其中一个的最后一个主要操作系统(虽然未来的版本几乎肯定会使用systemd),但它们可以作为第三方软件包使用 - 如果你希望您的系统可靠(检测到意外故障并在服务中断时重新启动服务,例如,无需使用您自己的代码),您应该使用其中一个。

例如,使用systemd:

systemctl kill -s SIGINT uwsgi.service

...或者,使用runit:

sv interrupt uwsgi

...对于upstart,您可以配置一个完全随意的重启命令,以便在initctl reload uwsgi上触发。


有关使用shell脚本进行流程管理的一般最佳实践文档,请参阅the wooledge.org wiki, maintained by irc.freenode.org's #bash channel上的相应页面。

答案 1 :(得分:0)

通常更容易让uwsgi自杀。您可以使用&#34; master-fifo&#34;您的配置中的选项,然后发送&#34; q&#34;到了fifo。这在此处描述:http://uwsgi-docs.readthedocs.org/en/latest/MasterFIFO.html