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

标签 shell centos sh uwsgi

我要编写一个脚本,它将从文件 (/tmp/pidfile.txt) 中获取所有文本,这只是一个 pid 号,然后将其存储为一个变量(比如pidvar) 之类的并执行以下命令:

kill -2 pidvar 

看起来很简单,我只是不知道如何从 .t​​xt 文件中获取 pid。如果有帮助,我已经安装了 python。试图让杀死 uWSGI 变得更容易,欢迎任何关于替代方案的建议。

在此先感谢您的帮助。

最佳答案

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

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

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

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

...但不要以任何一种方式进行。


pid 文件容易出现竞争条件,而基于进程树的监督系统可以保证它们只向正确的进程发送信号。

runit , daemontools , Upstart , systemd ,以及许多其他可用的替代方案,这些替代方案将保证不存在向基于陈旧数据的错误进程发送信号的风险。 CentOS 可能是最后一个附带其中之一的主要操作系统(虽然 future 的版本几乎肯定会使用 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 上的相应页面.

关于shell - 通过 pid 杀死 uWSGI 的自定义 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21566596/

相关文章:

linux - unix下两个文件的时间戳差异

shell - 管道是否保证在任何 POSIX shell 中创建子 shell?

linux - linux centos中如何保存文件

linux sed 仅在编辑第一行时读取整个文件

bash - 如何将反斜杠参数传递给脚本?

linux - 查找名称中数字小于 1950 的文件名

linux - 在 linux (CentOS 7.1) 上安装应用程序时如何解决依赖关系

permissions - Parallels plesk 权限通过 FTP 访问

json - 如何使用 jq 从未被 ""包围的 JSON 响应中获取小数/数字类型的值

shell - 我不断收到 "fish_pager cannot connect to universal variable server"