我是靠谱客的博主 自信金鱼,最近开发中收集的这篇文章主要介绍分享一个通用的程序启动bash脚本,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

    • 准备和需求
    • 源码
    • 简单介绍

准备和需求

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

源码

#!/bin/bash
CMD=$(basename $0)
OK="[ e[32mOKe[0m ]";
FAIL="[e[31mfaile[0m]";
help(){
echo -e "[e[32m-? | -h | -helpe[0m]"
echo -e "
帮助"
echo -e "[e[32mstarte[0m]"
echo -e "
启动"
echo -e "[e[32mstope[0m]"
echo -e "
停止"
echo -e "[e[32mrestarte[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[32mOKe[0m ]"; #会在终端上显示绿色前景色的OK 的变量
FAIL="[e[31mfaile[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 命令参数 以项目实际需要来给,这个例子仅供参考.

最后

以上就是自信金鱼为你收集整理的分享一个通用的程序启动bash脚本的全部内容,希望文章能够帮你解决分享一个通用的程序启动bash脚本所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部