我要编写一个脚本,它将从文件 (/tmp/pidfile.txt
) 中获取所有文本,这只是一个 pid 号,然后将其存储为一个变量(比如pidvar
) 之类的并执行以下命令:
kill -2 pidvar
看起来很简单,我只是不知道如何从 .txt 文件中获取 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/