分享一个通用的程序启动bash脚本

分享一个通用的程序启动bash脚本

准备和需求

要熟悉下面程序启动脚本,至少要会一点bash脚本

源码

#!/bin/bash

CMD=$(basename $0)
OK="[ \e[32mOK\e[0m ]";
FAIL="[\e[31mfail\e[0m]";

help(){
  echo -e "[\e[32m-? | -h | -help\e[0m]"
  echo -e "    帮助"
  echo -e "[\e[32mstart\e[0m]"
  echo -e "    启动"
  echo -e "[\e[32mstop\e[0m]"
  echo -e "    停止"
  echo -e "[\e[32mrestart\e[0m]"
  echo -e "    重启"
}

kill_cmd(){
  timeout=60
  i=0
  if [ -f .$CMD.pid ] ;then
    PID=`cat .$CMD.pid`
    if [[ `kill -0 $PID &>/dev/null;echo $?` = 0 ]] ;then
      kill -15 $PID &>/dev/null
      echo -n "stop  $CMD"
      while [[ `kill -0 $PID &>/dev/null;echo $?` = 0 ]] ; do
        if [ $i -ge $timeout ] ;then
          echo -e $FAIL
          return 1
        else
          echo -n "."
          sleep 1
          i=`expr $i + 1`
        fi
      done
      echo -e $OK
    fi
    rm .$CMD.pid
  fi
  return 0
}

start_cmd(){
  java="java -server -Xms128m -Xmx128m -Xss256k -XX:MaxPermSize=128m -XX:MaxDirectMemorySize=64m"
  java="$java -jar bin/http.jar"
  nohup $java >>logs/nohup.$CMD 2>&1 &
  echo "start $CMD"
  echo $! >> .$CMD.pid
  return 0
}

##################################################

case "$1" in
  'start')
    start_cmd
  ;;
  'stop')
    kill_cmd
  ;;
  'restart' | '')
    kill_cmd && start_cmd
  ;;
  '-?' | '-h' | '-help' | *)
    help
  ;;
esac

简单介绍

#!/bin/bash #bash脚本的开头
\e[31m #设置终端前景色 红色
\e[32m #设置终端前景色 绿色
\e[0m #关闭设置
OK="[ \e[32mOK\e[0m ]"; #会在终端上显示绿色前景色的OK 的变量
FAIL="[\e[31mfail\e[0m]"; #会在终端上显示红色前景色的fail 的变量
echo -e #处理特殊字符
echo -n #不换行输出
$? #返回状态码保存在 $? 环境变量中,每执行过一个命令后都会被更新
cat #文件读取操作命令
&>/dev/null #表示不保留任何输出

.文件名.pid #以pid 结尾的文件一般都是存放该文件名同名程序的进程id号
kill -0 pid #不发送任何信号,但是系统会进行错误检查.所以经常用来检查一个进程是否存在,存在则echo $?返回0;不存在返回1
kill -15 pid 或 kill pid #正常退出进程,退出前可以被阻塞或回调处理(如kill -15 pid 结束java 程序会调用java的Runtime 添加的ShutdownHook回调方法shutdownCallback(),可以用于结束前的释放操作)。并且它是Linux缺省的程序中断信号
kill -9 pid #强制杀死(当然不是绝对能杀死,如果这都杀不死,那就删了你的程序吧,太烂了).
强调: 关闭程序 用kill -15 pid 让程序自己正常退出, 如果长时间不能退出,才用kill -9 pid 结束.

出现的if[] if[[]] while[[]] 参考:https://www.cnblogs.com/the-capricornus/p/5009976.html
语法 if then fi , while do done 不知道的自行网上查,这里简单提下 出现的if while [] [[]]
test 是一个 shell 内建命令,功能是检查文件类型和比较值。而方括号[] 是shell的内建符号,[]扩起来的内容与调用test命令判断的结果是一样的
双方括号的主要功能是可以满足其内表达式的转义需求,就是说可以像在其他语言中一样使用出现的比较符号。
比如 <,>,==,!= 等,而这些符号在单方括号中只能用做字符串的比较。
比如 &&,|| ,在单方括号中是不能使用的

-Xms #java虚拟机堆区内存初始内存分配的大小 
-Xmx #java虚拟机堆区内存可被分配的最大上限,通常会将 -Xms 与 -Xmx两个参数的配置相同的值,其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源
 java 虚拟机参数 更多了解 需要去看jvm优化,篇幅问题这里不过多介绍
 nohup  ...  &  #将程序挂起在后台执行
 >>logs/nohup.$CMD 2>&1     #标准输出,错误输出都重定向到 logs/nohub.$CMD 文件里面  ($CMD是变量引用,具体值是什么在上面有提到)
 echo $! >> .$CMD.pid       #$! 最后执行的后台程序的pid , 将最后执行的后台程序进程id重定向输入到 .$CMD.pid 文件中
 注: java 命令参数 以项目实际需要来给,这个例子仅供参考.
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值