Shell 启动、停止、重启jar包服务脚本

使用该脚本时的注意事项:

1、去掉中文注释,以防乱码造成不必要的错误

2、如果是在windows上利用文本编辑器编辑,如notepad++,需要进行转码,以notepad++为例

Shell 启动、停止、重启jar包服务脚本_第1张图片

#!/bin/sh

# shell样例及解释,使用时请去掉注释,防止乱码

command='java -Xms256m -Xmx1024m -jar ./smart-monitor-api-0.0.1-SNAPSHOT.jar'
log_dir="/home/dev/deploy/zhihui/smart/logs/monitor"
log_file="$log_dir/smart-monitor.log"

# -p:如果目录已经存在,则不会有错误提示。若父目录不存在,将会创建父目录。该选项常用于创建级联目录
mkdir -p $log_dir

start(){
    if [ "$log_file" != "" ]; then
        exec $command  >> "$log_file" 2>&1 &	 
    else
        exec $command &
    fi
}

stop(){  
 #{print $2}:在ps到这个进程后获取进程pid,即下行的22704
 #smart  22704 22616  1 11:27 pts/20   00:05:47 java -jar smart-monitor-api-0.0.1-SNAPSHOT.jar
 #grep -v "grep" :排除掉grep本身搜索进程pid,否则搜索的程序只有一个,但是搜索结果却有两个pid
 ps -ef | grep "$command" |grep -v "grep"| awk '{print $2}' | while read pid   
 do 
    #ps --no-heading $pid | wc -l:通过进程号PID来查找进程是否存在,输出为0表示不存在,输出=1,表示存在,因为进程号不可能重复,所以输出肯定非0即1 
    C_PID=$(ps --no-heading $pid | wc -l)
    echo "CURRENT PID=$pid"
    if [ "$C_PID" == "1" ]; then
        echo "PID=$pid Ready to end"
        kill -9 $pid
        echo "PID=$pid end"
    else
        echo "PID=$pid does not exist"
    fi
 done
}

# ./run.sh start:根据脚本命令参数,确定执行的命令
case "$1" in  
start)  
start  
;;  
stop)  
stop  
;;    
restart)  
stop  
start  
;;  
*)  
printf 'Usage: %s {start|stop|restart}\n' "$prog"  
exit 1  
;;  
esac

shell报错一栏:

Ubuntu系统环境:[: 1: unexpected operator

Ubuntu 默认编译环境是 dash 得换用原始的bash编译 而我编译时候用的命令是 sh If.sh

 

最后用bash If.sh 就好了

 

再或者把 == 换成 = 因为dash判断的相等用 = 

 

 

你可能感兴趣的:(liunx,Shell,shell,pid,jar启停命令,sh)