服务启动、停止、状态和日志查看等shell脚本

Background

以Redis服务为例,该shell脚本可以通过传入不同的参数实现服务的启动、停止、服务运行状态查看、服务运行日志查看和进入服务shell命令界面等功能。

直接上脚本operator.sh

用法可以使用help参数查看哈,用法例如:
先赋执行权限chmod +x operator.sh
查看帮助命令operator.sh help

#!/bin/bash  
#  
# 服务基本信息
operate=$1
ps_1='./redis-server'
pid_1=`ps -ef | egrep "$ps_1" | egrep -v grep | awk '{print $2}'`
dir_home=/usr/redis/
dir_log=/usr/redis/redis-server.log
host_redis=localhost
port_redis=6377

# 判断输入参数
if [[ -z $operate || $operate = "help" ]]; then
    echo '#####'
    echo "please input your operate [run|stop|status|log|shell]"
    echo '#####'
fi

# 启动服务
if [[ $operate = "run" || $operate = "start" ]]; then
    rm -rf $dir_log
    nohup $dir_home/bin/redis-server $dir_home/redis.conf >> $dir_log 2>&1 &

# 停止服务
elif [[ $operate = "stop" ]]; then
    kill -9 $pid_1

# 查看服务运行状态
elif [[ $operate = "status" ]]; then
    if [[ $pid_1 ]]; then
        # 黄底蓝字
        echo -e "\033[43;34m RUNNING \033[0m"
    else
        # 蓝底黑字
        echo -e "\033[44;30m STOPPED \033[0m"
    fi

# 查看服务运行日志
elif [[ $operate = "log" ]]; then
    if [[ -e $dir_log ]]; then
        tail -f $dir_log
    else
        echo '#####'
        echo "No logs have been generated so far"
        echo '#####'
    fi

# 进入服务命令行界面
elif [[ $operate = "shell" ]]; then
    if [[ $pid_1 ]]; then
        $dir_home/bin/redis-cli -h $host_redis -p $port_redis
    else
        echo '#####'
        echo "The redis service has not been started yet"
        echo '#####'
    fi
fi

<center> 分割线 </center>


Background

鉴于上面的脚本挺受欢迎哈(至少在我的所有博客中访问量算较高的),这里再给一个操作jar包服务的脚本,也是集启动、停止、重启、日志查看等功能于一体,使用非常方便,这是自己在日常使用中不断完善的,若有好的建议和方法,欢迎不吝赐教哈。

直接上脚本operator-jar.sh

用法可以使用help参数查看哈,并且在脚本中也进行了相关使用说明。

#!/bin/bash

:<<!
【此脚本用法说明】
1、此脚本适用操作jar包服务;
2、哪个项目使用只需要在jar所在目录执行【ln -s /usr/bin/operate.sh operate.sh】。
!

# 服务操作参数
operate=$1

# 服务基本信息
homedir=$(pwd)
app=$(ls *.jar)
#appsuffix=${app#*${project}}

# 获取项目名【去掉后缀-1.0-SNAPSHOT.jar的部分】
function get_project(){
    declare -a seplist
    j=0
    for i in `seq ${#app}`
    do
        char=${app:$i-1:1}
        if [[ $char = '-' ]]; then
            seplist[$j]=$i
            j=$j+1
        fi
    done
    # 排序
    len=${#seplist[@]}
    for((i=0; i<$len; i++)){
      for((j=i+1; j<$len; j++)){
        if [[ ${seplist[i]} -gt ${seplist[j]} ]]
        then
          temp=${seplist[i]}
          seplist[i]=${seplist[j]}
          seplist[j]=$temp
        fi
      }
    }
    # 取出倒数第二个"-"的索引
    size=${#seplist[*]}
    index=$(expr $size - 2)
    idx=$(expr ${seplist[$index]} - 1)
    # 获取项目名
    project=${app:0:${idx}}
    echo $project
}

# 项目名称
project=$(get_project)

# 日志
logname=$(ls logs/*.log)
logdir=$homedir/$logname

# 进程
pid=`ps -ef | egrep "$app" | egrep -v grep | awk '{print $2}'`

# 定制化shell输出
function customize_shell_out(){
    echo -e "\033[5;34m ***** \033[0m"
    echo -e "\033[32m $@ ! \033[0m"
    echo -e "\033[5;34m ***** \033[0m"
}

# 判断输入参数
if [[ -z $operate || $operate = "help" ]]; then
    # 请输入操作参数
    msg='Please input the param [start|stop|restart|status|log]'
    customize_shell_out $msg

# 启动服务
elif [[ $operate = "run" || $operate = "start" ]]; then
    if [[ $pid ]]; then
        # 服务正在运行中
        msg='The service is already running'
        customize_shell_out $msg
    else
        cd $homedir/
        nohup java -jar $app > /dev/null 2>&1 &
        msg='Start success'
        customize_shell_out $msg
    fi

# 重启服务
elif [[ $operate = "restart" ]]; then
    if [[ $pid ]]; then
        kill -9 $pid
        cd $homedir/
        nohup java -jar $app > /dev/null 2>&1 &
    else
        cd $homedir/
        nohup java -jar $app > /dev/null 2>&1 &
    fi
    msg='Restart success'
    customize_shell_out $msg

# 停止服务
elif [[ $operate = "stop" ]]; then
    if [[ $pid ]]; then
        kill -9 $pid
        msg='Stopped success'
        customize_shell_out $msg
    else
        # 服务早已停止或未启动
        msg='The service is already down'
        customize_shell_out $msg
    fi

# 查看服务运行状态
elif [[ $operate = "status" ]]; then
    if [[ $pid ]]; then
        # 黄底蓝字
        msg='RUNNING'
        customize_shell_out $msg
    else
        # 蓝底黑字
        echo -e "\033[5;34m ***** \033[0m"
        echo -e "\033[31m STOPPED ! \033[0m"
        echo -e "\033[5;34m ***** \033[0m"
    fi

# 查看服务运行日志
elif [[ $operate = "log" ]]; then
    if [[ -e $logdir ]]; then
        tail -f $logdir
    else
        # 尚未生成日志
        msg='No log has been generated yet'
        customize_shell_out $msg
    fi

# 参数输入有误
else
    msg='Please input the correct param [start|stop|restart|status|log]'
    customize_shell_out $msg
fi

使用实例

下图是我实际中的脚本的使用。
说明:

  • 所有项目部署在/root/projects目录下
  • 每个项目部署的目录需要和项目名称相同(为了不再修改脚本)
  • 每个项目下都有一个operate.sh脚本,每个脚本中只有项目名称不同。
image.png
image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容