linux服务脚本编写
2017-06-13 19:44
330 查看
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 | #!/bin/bash ### BEGIN INIT INFO # Provides: 应用程序开发者 # RequiRED-Start: $all # RequiRED-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: 简短应用程序描述 # Description: 详细应用程序描述 ### END INIT INFO # 程序文件目录 ROOT="/work/code/cusflo-server-moon" # 程序文件 APP="./dog/client_update_dog.py" # 程序配置文件 CONFIG="./server_config.ini" # 服务日志 DEFAULT_LOG_FILE='./daodaoliang.log' # 样式定制 RED="\\e[31m" GREEN="\\e[32m" YELLOW="\\e[33m" BLACK="\\e[0m" POS="\\e[60G" ok_msg() { echo -e "${1}${POS}${BLACK}[${GREEN} OK ${BLACK}]" } failed_msg() { echo -e "${1}${POS}${BLACK}[${RED}FAILED${BLACK}]" } # load process info of app # exist return 0 # no exist return 1 load_process_info() { # get pid app_pid=$(ps -ef|grep ${APP}|gawk '$0 !~/grep/ {print $2}' |tr -s '\n' ' ') # check pid again ps -p ${app_pid} >/dev/null 2>/dev/null ret=$?; if [[ 0 -ne $ret ]]; then error_msg="process $app_pid does not exists"; return 1; fi return 0; } start() { # if exists, exit. load_process_info if [[ 0 -eq $? ]]; then failed_msg "${APP} started(pid ${app_pid}), should not start it again."; return 0; fi # not exists, start server ok_msg "Starting ${APP}..." # get log file log_file=`cd ${ROOT} && cat ${CONFIG} |grep '^log_file'| awk '{print $2}'| awk -F ';' '{print $1}'` if [[ -z $log_file ]]; then log_file=${DEFAULT_LOG_FILE}; fi # get abs path log_dir=`dirname $log_file` log_file=`(cd ${ROOT} && cd $log_dir && pwd)`/`basename $log_file` # TODO: FIXME: set limit by, for instance, "ulimit -HSn 10000" if [[ -z $log_file ]]; then (cd ${ROOT};nohup python ${APP} >/dev/null 2>&1 &) else (cd ${ROOT};nohup python ${APP} >/dev.null >> $log_file 2>&1 &) fi # check again after start server for ((i = 0; i < 5; i++)); do # sleep a little while, for app may start then crash. sleep 0.1 load_process_info ret=$?; if [[ 0 -ne $ret ]]; then failed_msg "${APP} start failed"; failed_msg "see $log_file"; return $ret; fi done # check whether started. load_process_info ret=$?; if [[ 0 -eq $? ]]; then ok_msg "${APP} started(pid ${app_pid})"; return 0; fi failed_msg "${APP} not started" return $ret } stop() { # not start, exit load_process_info if [[ 0 -ne $? ]]; then failed_msg "${APP} not start."; return 0; fi ok_msg "Stopping ${APP}(pid ${app_pid})..." # process exists, try to kill to stop normally for((i=0;i<30;i++)); do load_process_info if [[ 0 -eq $? ]]; then kill -s SIGTERM ${app_pid} 2>/dev/null ret=$?; if [[ 0 -ne $ret ]]; then failed_msg "send signal SIGTERM failed ret=$ret"; return $ret; fi sleep 0.1 else ok_msg "${APP} stopped by SIGTERM" # delete the pid file when stop success. rm -f ${pid_file} break; fi done # process exists, use kill -9 to force to exit load_process_info if [[ 0 -eq $? ]]; then kill -s SIGKILL ${app_pid} 2>/dev/null ret=$?; if [[ 0 -ne $ret ]]; then failed_msg "send signal SIGKILL failed ret=$ret"; return $ret; fi ok_msg "${APP} stopped by SIGKILL" else # delete the pid file when stop success. rm -f ${pid_file} fi sleep 0.1 return 0 } # get the status of srs process # @return 0 if srs is running; otherwise, 1 for stopped. status() { load_process_info ret=$?; if [[ 0 -eq $ret ]]; then echo "${APP}(pid ${app_pid}) is running."; return 0; fi echo "${APP} is stopped, $error_msg" return 1 } menu() { case "$1" in start) start ;; stop) stop ;; restart) stop start ;; status) status ;; *) echo "Usage: $0 {start|stop|status|restart}" return 1 ;; esac } menu $1 code=$? exit ${code} |
相关文章推荐
- Linux企业级项目实践之网络爬虫(22)——编写爬虫系统服务控制脚本
- Linux企业级项目实践之网络爬虫(22)——编写爬虫系统服务控制脚本
- 编写linux服务启动脚本
- linux环境下编写shell脚本实现启动停止tomcat服务的方法
- linux环境下编写shell脚本启动和关闭jar包服务程序
- dubbo基础篇三_linux部署dubbo服务以及shell脚本编写
- Linux01-BASH编写sysV服务脚本47
- [置顶] 编写shell脚本以及利用函数实现批量安装Linux服务配置
- linux脚本编写基础
- Linux脚本编写
- Linux脚本编写基础
- SOAP净化有线协议(三):用脚本语言编写服务
- Linux 脚本编写基础
- linux脚本编写基础
- windows下编写的shell脚本如何在Linux运行
- Linux 脚本编写基础
- linux自动定时运行的脚本编写
- 使用MONO移植ASP.NET 编写的Window服务到Linux
- linux APACHE2.2.10源码安装服务自动启动脚本
- Linux脚本编写基础