CentOS7 uwsgi重启(通过shell脚本获取进程号并kill)

uWSGI 通过 xxx.ini 启动后会在相同目录下生成一个 xxx.pid 的文件,里面只有一行内容是 uWSGI 的主进程的进程号。
启动:
uwsgi --ini xxx.ini
重启:
uwsgi --reload xxx.pid
停止:
uwsgi --stop xxx.pid
以上是当前网上对于uwsgi重启操作的最常见的描述,但是笔者通过ini文件启动时发现并没有生成xxx.pid文件。于是自然的想法是通过shell脚本获取进程号并进行kill操作,脚本如下:

#!/bin/bash
PIDS=`ps -ef | grep uwsgi | grep -v grep | awk '{ print $2 }'`
if [ "$PIDS" ]
then
kill -9 $PIDS
uwsgi --ini uwsgi.ini
echo "uwsgi restarted."
else
echo "restart failed."
fi

获取进程号的命令需要包含在``或$()之间,笔者在此过程中遇到过两个问题,描述如下:

  1. too many arguments错误
    引起该错误的原因是
if [ "$PIDS" ]

中变量未加双引号,加上双引号该问题解决。

  1. arguments must be process or job IDs
    引起该问题的原因可能是shell脚本文件名中包含了uwsgi字符串,此时PIDS中会包含执行此shell脚本的进程号,从而试图删除该脚本进程,造成该错误,解决方法为通过grep -v忽略当前脚本即可。
PIDS=`ps -ef | grep {process_name} | grep -v grep | grep -v sh | awk '{ print $2 }'`
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。