首页 > 代码库 > linux服务脚本编写
linux服务脚本编写
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 | ### 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} |
http://daodaoliang.com/linux%E5%AD%A6%E4%B9%A0/2015/02/04/linux%E5%AD%A6%E4%B9%A0-2015-02-04-%E6%9C%8D%E5%8A%A1%E8%84%9A%E6%9C%AC%E7%BC%96%E5%86%99/
linux服务脚本编写
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。