下面来写脚本,将这些操作都放在脚本里,然后实现自动化管理。
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,其实也就是一个命令的问题。