功能说明:

  • 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

代码部分:

  1. #!/bin/bash
  2. # author: ck
  3.  
  4. check()
  5. {
  6. if (($(ps aux|grep manage.py| grep "${port:-9000}" |grep -v grep|wc -l) == 0));then
  7. # stopped
  8. return 1;
  9. else
  10. # running
  11. return 0;
  12. fi
  13. }
  14.  
  15. start()
  16. {
  17. check
  18. if (($? == 1));then
  19. echo -n "standard server ${port:-9000} to start......"
  20. path=$(dirname $0)
  21. if [[ $path != '.' ]];then
  22. cd $path
  23. fi
  24. # 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 &
  25. nohup python3 manage.py start_server -h "${host:-0.0.0.0}" -p "${port:-9000}" -k wf >nohup.out 2>&1 &
  26. while true
  27. do
  28. check
  29. if (($? == 1));then
  30. echo -n '...'
  31. sleep 1
  32. else
  33. echo -e '\033[32mstarted\033[1m\033[0m'
  34. break
  35. fi
  36. done
  37. else
  38. echo "standard server ${port:-9000} has been running!!!"
  39. fi
  40. }
  41.  
  42. fstop()
  43. {
  44. check
  45. if (($? == 1));then
  46. echo "standard server ${port:-9000} has been stopped!!!"
  47. else
  48. echo -n "standard server ${port:-9000} force to stop....."
  49. ps aux|grep manage.py |grep "${port:-9000}" |grep -v grep|awk '{print $2}'|xargs kill -9
  50. while true
  51. do
  52. check
  53. if (($? == 1));then
  54. echo -e '\033[32mstopped\033[1m\033[0m'
  55. break
  56. else
  57. echo -n '...'
  58. sleep 1
  59. fi
  60. done
  61. fi
  62. }
  63.  
  64. stop()
  65. {
  66. check
  67. if (($? == 1));then
  68. echo "standard server ${port:-9000} has been stopped!!!"
  69. else
  70. echo -n "standard server ${port:-9000} to stop....."
  71. spid=1
  72. tp_list=($(ps aux|grep manage.py |grep "${port:-9000}" |grep -v grep|awk '{print $2}'|xargs))
  73. for tpid in ${tp_list[@]}
  74. do
  75. if ((spid == 1));then
  76. spid=$tpid
  77. elif ((tpid < spid));then
  78. spid=$tpid
  79. fi
  80. done
  81. kill -15 $spid
  82. retry_time=3
  83. while true
  84. do
  85. if ((retry_time == 0));then
  86. echo
  87. fstop
  88. break
  89. fi
  90. check
  91. if (($? == 1));then
  92. echo -e '\033[32mstopped\033[1m\033[0m'
  93. break
  94. else
  95. ((retry_time=retry_time-1))
  96. echo -n '.'
  97. sleep 1
  98. fi
  99. done
  100. fi
  101. }
  102.  
  103. status()
  104. {
  105. check
  106. if (($? == 1));then
  107. echo -e "standard server ${port:-9000} now is \033[32mstopped\033[1m\033[0m"
  108. else
  109. echo -e "standard server ${port:-9000} now is \033[32mrunning\033[1m\033[0m"
  110. fi
  111. }
  112.  
  113. running()
  114. {
  115. port_list=$(ps aux | grep "manage.py" | grep -v "grep" |awk '{print $17}' |xargs)
  116. for port in ${port_list}
  117. do
  118. echo -e "standard server ${port} now is \033[32mrunning\033[1m\033[0m"
  119. done
  120. }
  121.  
  122. restart() {
  123. check
  124. if (($? == 1));then
  125. start
  126. else
  127. stop
  128. while true
  129. do
  130. check
  131. if (($? == 1));then
  132. start
  133. break
  134. else
  135. sleep 1
  136. fi
  137. done
  138. fi
  139. }
  140.  
  141. if (($# == 1)) || (($# == 3));then
  142. if (($# == 3));then
  143. host=$2
  144. port=$3
  145. fi
  146.  
  147. case $1 in
  148. start|stop|status|restart|fstop|running)
  149. $1
  150. ;;
  151. *)
  152. if (($# == 1));then
  153. echo "Usage: bash $0 {start|stop|status|restart|fstop|running}"
  154. exit 2
  155. else
  156. echo "Usage: bash $0 {start|stop|status|restart|fstop|running} host port"
  157. exit 2
  158. fi
  159. esac
  160.  
  161. else
  162. echo "Usage: bash $0 {start|stop|status|restart|fstop|running} host port"
  163. exit 2
  164. fi

ending ~

shell 实战 -- 基于一个服务启动,关闭,状态检查的脚本的更多相关文章

  1. Linux下一个Redis启动/关闭/重新启动服务脚本

    脚本功能: 实现redis单机多实例情况下的正常启动.关闭.重新启动单个redis实例.完毕系统标准服务的下面经常使用功能:  start|stop|status|restart 注:redis程序代 ...

  2. Oracle 服务启动关闭

    有没有感觉到,自从装上Oracle之后,电脑变卡了?卡是正常的,oracle作为大型数据库软件,运行起来是非常吃内存的. 所以对于自用的电脑来说,不使用Oracle的时候,应该把Oracle的一系列服 ...

  3. Oracle 11g 服务启动/关闭 及 DB dump 导入

    本地启动Oracle 服务脚本 由于本地机子安装了Oracle后,会自动启动一些默认的Oracle服务,这样子会导致机子比较慢.所以需要改成手动启动/关闭服务. 即用即开,不用就关. 开启的脚本: O ...

  4. 简述uwsgi使用一个服务启动多个文件的用法

    [场景篇] 为了节省端口的占用,将N个flask应用服务——每个对应一个文件(web.py.django也一样)合并为一个端口服务来启用 [寻思篇] 通常的做法:每个文件配置一个xml 或者 ini文 ...

  5. linux 服务 启动 关闭 列表

    ##查看服务在每个级别的运行状态 chkconfig --list httpd           0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:启用  6:关闭 bluetooth ...

  6. redis服务启动关闭脚本

    代码如下: # chkconfig: 90 10 # description: service of redis for start and stop add by tomener PATH=/usr ...

  7. Windows下快速启动/关闭orcl服务

    大家都知道windows下绝大部分都是图形操作化,很少用命令来执行,例如启动.关闭orcl数据库服务时,一般情况都是在任务管理器(taskmgr.ctrl+shift+esc)或服务(services ...

  8. linux学习一个服务(未完)

    学习一个服务的过程 1.了解服务的作用:名字 功能,特点 2.安装 3.配置文件位置,端口 4.服务启动关闭的脚本 5.此服务的使用方法 6.修改配置文件,实战举例 7.排错(从下到上,从内到外)

  9. Mongodb启动&关闭

    mac 下mongo的启动和关闭以及启动问题解决 mongo的安装在这:http://www.cnblogs.com/leinov/p/6855784.html Mac os mongodb数据安装路 ...

随机推荐

  1. ubuntu18.04安装docker和开通对外2375端口(方便portainer管理)

    date: 2019-08-03   21:39:37 author: headsen chen apt-get install apt-transport-https ca-certificates ...

  2. flutter 打开应用的闪屏动画

    import 'package:flutter/material.dart'; import 'package:flutter_app/pages/SplashScreen.dart'; void m ...

  3. Android输入法遮挡了输入框,使用android:fitsSystemWindows="true"后界面顶部出现白条解决方案

    我的最外层是LinearLayout,自定义CustomLinearLayout继承LinearLayout,重写fitSystemWindows和onApplyWindowInsets两个方法: p ...

  4. 安装DEDECMS出现Function ereg_replace()错误的解决方法

    这个问题我记得以前有遇到的,是在本地调试dedecms整站程序的时候,从网上下载了一个整套程序包括模板到本地调试,导入数据库安装都正常,但是登陆 后台就出现"Deprecated: Func ...

  5. Spring cloud微服务安全实战-5-9实现基于session的SSO(Token有效期)

    token的有效期 会出现一种情况session有效期还没到.但是token过期了. 用户登陆着,但是token失效了 没法访问服务了. 刷新令牌要和clientId和ClientSecret一起用, ...

  6. 零基础学Python-第一章 :Python介绍和安装-03.Python的安装

    官方版本的python下载以及安装方法,以及pycharm的安装和打开. 社区版就可以完全支持我们的需求了. 点击左侧的图片到右边. 在命令行输入python3 exit() 退出命令行的编辑器. p ...

  7. linux传输文件lrzsz

    linux传输文件

  8. SpringCloud学习成长之十四 服务注册(consul)

    这篇文章主要介绍 spring cloud consul 组件,它是一个提供服务发现和配置的工具.consul具有分布式.高可用.高扩展性. 一.consul 简介 consul 具有以下性质: 服务 ...

  9. python flask框架学习(三)——豆瓣微信小程序案例(一)templates的使用,宏的使用,前端后台传数据,前端写python语句

    目录 一.templates的使用 (1)在templates里创建一个index.html (2)再在app.py里写 (3)展示效果 二.构建第一个电影评分 (1)准备好素材放进static里的i ...

  10. spring 使用Spring表达式(Spring EL)

    Spring还提供了更灵活的注入方式,那就是Spring表达式,实际上Spring EL远比以上注入方式强大,我们需要学习它.Spring EL拥有很多功能. 使用Bean的id来引用Bean. •调 ...