当前位置:C++技术网 > 精选软件 > 云平台开发架构分析系列:22 为nginx和uwsgi制作自动化管理脚本

云平台开发架构分析系列:22 为nginx和uwsgi制作自动化管理脚本

更新时间:2017-07-05 08:47:51浏览次数:1+次

    前面我们介绍了Nginx和uWSGI的启动停止方法。而作为一个整体,Nginx和uWSGI应该要一起启动和停止。前面我们只是对它们单独做了启动的介绍。如果我们每次都手动去启停,未免有点麻烦。
    下面来写脚本,将这些操作都放在脚本里,然后实现自动化管理。
1.启动服务器nginx和uWSGI
    启动nginx,只要运行nginx程序就行。也就是执行下面这个命令:
/usr/local/nginx/sbin/nginx
    如果你安装的nginx不在这个位置,换成你安装的位置就行了。另外,我们再单独写一个启动uwsgi程序的脚本,命名为start_uwsgi.sh,并放在/data/bin/下,所以我们只需要执行这个脚本,就可以启动uWSGI服务器。命令为:
/data/bin/start_uwsgi.sh
    将这两句命令放在一个脚本文件中,放在/data/bin/下,命名为:server_start.sh,然后放在根目录下。这个文件的内容就是:
/usr/local/nginx/sbin/nginx
/data/bin/start_uwsgi.sh
    最后我们启动服务器时,执行:
/data/bin/server_start.sh
    就行了。如果你觉得名字有点长,你可以写成srv_s.sh,名字随便取,自己知道就行了。记得,sh文件都要增加可执行的权限哦。
    我们还没有说start_uwsgi.sh文件的内容呢!下面来看看这个文件如何写。
    我们使用ini配置文件的形式来启动uwsgi程序。我们假定配置文件里指定了主进程和4个工作进程,也就是一共有5个进程。我们执行这个脚本的时候,我们先来判断一下,uwsgi是否已经运行了,如果运行了,只提示在运行,如果没有运行,就用ini文件启动uwsgi。
    判断的依据就是使用uwsgi启动的进程的数量,所以要先计算出来数量值,然后比较是否大于4,如果大于,则表示正在运行,如果小于等于,则表示没有运行或者部分运行,将重新启动uwsgi。
    所以start_uwsgi.sh内容如下:
#!/bin/bash
pscount=$(ps aux | grep uwsgi.ini | wc -l)
if [ $pscount -gt 4 ]
then
    echo "uwsgi is running!"
    exit 0
else
    uwsgi --ini /data/uwsgi.ini
    echo "start uwsgi [ok]"
fi
    说明一下:
ps aux :枚举进程列表
grep "[u]wsgi.ini" :按照关键字符串uwsgi.ini过滤。因为用这个ini配置文件启动的uwsgi的一行都会带有uwsgi.ini的字样。而在字母u左右加一个总括号,是避免在过滤的时候,将grep本身这一句里含的uwsgi.ini也算进去了。[]作为一个字符匹配,[]两个字符又含在字符串里,这样[u]wsgi.ini就无法匹配到uwsgi.ini了。
    这样处理后,后面启动服务器,就很简单了。当然,如果你也想在启动nginx前,也检测一下是否已经在运行了,和start_uwsgi.sh的做法差不多的,进程数量和nginx的配置文件要配套哦。比如你写一个脚本文件start_nginx.sh,内容如下:
#!/bin/bash
pscount=$(ps -aux | grep [n]ginx | wc -l)
if [ $pscount -gt 4 ]
then
    echo "nginx is running!"
    exit 0
else
    /usr/local/nginx/sbin/nginx
    echo "start nginx [ok]"
fi

2.停止服务器nginx和uWSGI
    nginx的主进程ID存在一个文件中,所以我们可以直接读取文件获取PID,然后kill掉,这样就关闭了nginx。所以命令如下:
kill $(cat /usr/local/nginx/logs/nginx.pid)
    要停止uwsgi,我们先列举出来所有uwsgi进程,然后过滤出所有的PID,然后一并kill掉。我们同样还是将停止uwsgi的命令放在一个脚本文件里,放在/data/bin/,命名为stop_uwsgi.sh,内容为:
#!/bin/bash
pid_list=$(ps -ef | grep [u]wsgi.ini | awk '{print $2}')
echo $pid_list
kill -9 $pid_list
echo "stop uwsgi [ok]"
    我们再写一个脚本,来关闭两个服务器,放在/data/bin/下,命名为server_stop.sh,内容如下:
kill $(cat /usr/local/nginx/logs/nginx.pid)
/data/bin/stop_uwsgi.sh
    当然,如果你想检测服务器是否已经关闭。如果关闭了,就提示已经停止运行了。免得在kill的时候,提示不存在命令参数。检测的办法和启动时一样,这里就不写了。
3.重启服务器nginx和uWSGI
    那么重启服务器,就很简单了,就是先关闭服务器,再启动服务器。创建一个脚本为server_restart.sh,放在/data/bin/下,内容为:
/data/bin/server_stop.sh
/data/bin/server_start.sh
    这样,自动化管理服务器的脚本就制作好了。如果在启动和停止的时候,需要加入其它的服务器,方法类似,比如mysql,其实也就是一个命令的问题。