shell 实战 -- 基于一个服务启动,关闭,状态检查的脚本
功能说明:
- check:检查服务状态,在开启,关闭,状态检查时都会用到这个函数,所以封装起来放到最前面
- start:开启服务
- stop:关闭服务
- fstop:强制关闭
- status:检查服务状态
- running:查看所有正在运行的状态
使用说明:
开启服务:
启动一个进程监听 9000(默认)端口:
- sh standard_server.sh start
启动一个进程监听 8000(自定义)端口:
- 格式: sh standard_server.sh start ipaddress port
- sh standard_server.sh start 10.10.4.200 8000
关闭服务:
关闭监听 9000(默认)端口:
- sh standard_server.sh stop
关闭监听 8000(自定义)端口:
- 格式: sh standard_server.sh stop ipaddress port
- sh standard_server.sh stop 10.10.4.200 8000
查看监听状态:
查看 9000 端口(默认)监听状态:
- sh standard_server.sh status
查看 8000端口(自定义)监听状态:
- 格式: sh standard_server.sh status ipaddress port
- sh standard_server.sh status 10.10.4.200 8000
查看所有正在监听端口:
- sh standard_server.sh running
代码部分:
- #!/bin/bash
- # author: ck
- check()
- {
- if (($(ps aux|grep manage.py| grep "${port:-9000}" |grep -v grep|wc -l) == 0));then
- # stopped
- return 1;
- else
- # running
- return 0;
- fi
- }
- start()
- {
- check
- if (($? == 1));then
- echo -n "standard server ${port:-9000} to start......"
- path=$(dirname $0)
- if [[ $path != '.' ]];then
- cd $path
- fi
- # nohup /home/seemmo/share/python/centos/python3.6.6/bin/python3 manage.py start_server -h "${host:-0.0.0.0}" -p "${port:-9000}" -k wf >nohup.out 2>&1 &
- nohup python3 manage.py start_server -h "${host:-0.0.0.0}" -p "${port:-9000}" -k wf >nohup.out 2>&1 &
- while true
- do
- check
- if (($? == 1));then
- echo -n '...'
- sleep 1
- else
- echo -e '\033[32mstarted\033[1m\033[0m'
- break
- fi
- done
- else
- echo "standard server ${port:-9000} has been running!!!"
- fi
- }
- fstop()
- {
- check
- if (($? == 1));then
- echo "standard server ${port:-9000} has been stopped!!!"
- else
- echo -n "standard server ${port:-9000} force to stop....."
- ps aux|grep manage.py |grep "${port:-9000}" |grep -v grep|awk '{print $2}'|xargs kill -9
- while true
- do
- check
- if (($? == 1));then
- echo -e '\033[32mstopped\033[1m\033[0m'
- break
- else
- echo -n '...'
- sleep 1
- fi
- done
- fi
- }
- stop()
- {
- check
- if (($? == 1));then
- echo "standard server ${port:-9000} has been stopped!!!"
- else
- echo -n "standard server ${port:-9000} to stop....."
- spid=1
- tp_list=($(ps aux|grep manage.py |grep "${port:-9000}" |grep -v grep|awk '{print $2}'|xargs))
- for tpid in ${tp_list[@]}
- do
- if ((spid == 1));then
- spid=$tpid
- elif ((tpid < spid));then
- spid=$tpid
- fi
- done
- kill -15 $spid
- retry_time=3
- while true
- do
- if ((retry_time == 0));then
- echo
- fstop
- break
- fi
- check
- if (($? == 1));then
- echo -e '\033[32mstopped\033[1m\033[0m'
- break
- else
- ((retry_time=retry_time-1))
- echo -n '.'
- sleep 1
- fi
- done
- fi
- }
- status()
- {
- check
- if (($? == 1));then
- echo -e "standard server ${port:-9000} now is \033[32mstopped\033[1m\033[0m"
- else
- echo -e "standard server ${port:-9000} now is \033[32mrunning\033[1m\033[0m"
- fi
- }
- running()
- {
- port_list=$(ps aux | grep "manage.py" | grep -v "grep" |awk '{print $17}' |xargs)
- for port in ${port_list}
- do
- echo -e "standard server ${port} now is \033[32mrunning\033[1m\033[0m"
- done
- }
- restart() {
- check
- if (($? == 1));then
- start
- else
- stop
- while true
- do
- check
- if (($? == 1));then
- start
- break
- else
- sleep 1
- fi
- done
- fi
- }
- if (($# == 1)) || (($# == 3));then
- if (($# == 3));then
- host=$2
- port=$3
- fi
- case $1 in
- start|stop|status|restart|fstop|running)
- $1
- ;;
- *)
- if (($# == 1));then
- echo "Usage: bash $0 {start|stop|status|restart|fstop|running}"
- exit 2
- else
- echo "Usage: bash $0 {start|stop|status|restart|fstop|running} host port"
- exit 2
- fi
- esac
- else
- echo "Usage: bash $0 {start|stop|status|restart|fstop|running} host port"
- exit 2
- fi
ending ~
shell 实战 -- 基于一个服务启动,关闭,状态检查的脚本的更多相关文章
- Linux下一个Redis启动/关闭/重新启动服务脚本
脚本功能: 实现redis单机多实例情况下的正常启动.关闭.重新启动单个redis实例.完毕系统标准服务的下面经常使用功能: start|stop|status|restart 注:redis程序代 ...
- Oracle 服务启动关闭
有没有感觉到,自从装上Oracle之后,电脑变卡了?卡是正常的,oracle作为大型数据库软件,运行起来是非常吃内存的. 所以对于自用的电脑来说,不使用Oracle的时候,应该把Oracle的一系列服 ...
- Oracle 11g 服务启动/关闭 及 DB dump 导入
本地启动Oracle 服务脚本 由于本地机子安装了Oracle后,会自动启动一些默认的Oracle服务,这样子会导致机子比较慢.所以需要改成手动启动/关闭服务. 即用即开,不用就关. 开启的脚本: O ...
- 简述uwsgi使用一个服务启动多个文件的用法
[场景篇] 为了节省端口的占用,将N个flask应用服务——每个对应一个文件(web.py.django也一样)合并为一个端口服务来启用 [寻思篇] 通常的做法:每个文件配置一个xml 或者 ini文 ...
- linux 服务 启动 关闭 列表
##查看服务在每个级别的运行状态 chkconfig --list httpd 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:启用 6:关闭 bluetooth ...
- redis服务启动关闭脚本
代码如下: # chkconfig: 90 10 # description: service of redis for start and stop add by tomener PATH=/usr ...
- Windows下快速启动/关闭orcl服务
大家都知道windows下绝大部分都是图形操作化,很少用命令来执行,例如启动.关闭orcl数据库服务时,一般情况都是在任务管理器(taskmgr.ctrl+shift+esc)或服务(services ...
- linux学习一个服务(未完)
学习一个服务的过程 1.了解服务的作用:名字 功能,特点 2.安装 3.配置文件位置,端口 4.服务启动关闭的脚本 5.此服务的使用方法 6.修改配置文件,实战举例 7.排错(从下到上,从内到外)
- Mongodb启动&关闭
mac 下mongo的启动和关闭以及启动问题解决 mongo的安装在这:http://www.cnblogs.com/leinov/p/6855784.html Mac os mongodb数据安装路 ...
随机推荐
- ubuntu18.04安装docker和开通对外2375端口(方便portainer管理)
date: 2019-08-03 21:39:37 author: headsen chen apt-get install apt-transport-https ca-certificates ...
- flutter 打开应用的闪屏动画
import 'package:flutter/material.dart'; import 'package:flutter_app/pages/SplashScreen.dart'; void m ...
- Android输入法遮挡了输入框,使用android:fitsSystemWindows="true"后界面顶部出现白条解决方案
我的最外层是LinearLayout,自定义CustomLinearLayout继承LinearLayout,重写fitSystemWindows和onApplyWindowInsets两个方法: p ...
- 安装DEDECMS出现Function ereg_replace()错误的解决方法
这个问题我记得以前有遇到的,是在本地调试dedecms整站程序的时候,从网上下载了一个整套程序包括模板到本地调试,导入数据库安装都正常,但是登陆 后台就出现"Deprecated: Func ...
- Spring cloud微服务安全实战-5-9实现基于session的SSO(Token有效期)
token的有效期 会出现一种情况session有效期还没到.但是token过期了. 用户登陆着,但是token失效了 没法访问服务了. 刷新令牌要和clientId和ClientSecret一起用, ...
- 零基础学Python-第一章 :Python介绍和安装-03.Python的安装
官方版本的python下载以及安装方法,以及pycharm的安装和打开. 社区版就可以完全支持我们的需求了. 点击左侧的图片到右边. 在命令行输入python3 exit() 退出命令行的编辑器. p ...
- linux传输文件lrzsz
linux传输文件
- SpringCloud学习成长之十四 服务注册(consul)
这篇文章主要介绍 spring cloud consul 组件,它是一个提供服务发现和配置的工具.consul具有分布式.高可用.高扩展性. 一.consul 简介 consul 具有以下性质: 服务 ...
- python flask框架学习(三)——豆瓣微信小程序案例(一)templates的使用,宏的使用,前端后台传数据,前端写python语句
目录 一.templates的使用 (1)在templates里创建一个index.html (2)再在app.py里写 (3)展示效果 二.构建第一个电影评分 (1)准备好素材放进static里的i ...
- spring 使用Spring表达式(Spring EL)
Spring还提供了更灵活的注入方式,那就是Spring表达式,实际上Spring EL远比以上注入方式强大,我们需要学习它.Spring EL拥有很多功能. 使用Bean的id来引用Bean. •调 ...