使用该脚本时的注意事项:
1、去掉中文注释,以防乱码造成不必要的错误
2、如果是在windows上利用文本编辑器编辑,如notepad++,需要进行转码,以notepad++为例
#!/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判断的相等用 = |