欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 一个启动脚本例子

一个启动脚本例子

2024/11/30 8:57:45 来源:https://blog.csdn.net/qq_53768302/article/details/140018600  浏览:    关键词:一个启动脚本例子

一、全部代码 

#!/bin/bash
DATE=$(date +%Y%m%d)SOURCE="abc.jar"
TARGET="backup/abc.jar.jew.$DATE"if [ -f "$SOURCE" ]; thencp "$SOURCE" "$TARGET"
firm -f abc.jar
mv abc_1.jar abc.jarpidNum=`ps -ef | grep $SOURCE | grep -v "grep"|awk '{print $2}'`
if [ "$pidNum" = "" ];thenecho "not"
elseecho "pid : $pidNum"kill -15 $pidNumecho "successfully"
finohup java -jar abc.jar > log.file 2>&1

二、分析

后端语言:java        新jar包名字:abc_1.jar        老jar包(被替换jar包):abc.jar

目的:首先判断后端的abc.jar是否存在,如果存在,那就把这个jar复制并加当前时间命名后作为备份,放到备份文件夹里。删除abc.jar,把新jar包abc_1.jar重命名为abc.jar。停掉进程后,重新启动。

---------------------------------------------------------------------------------------------------------------------------------

#!/bin/bash
DATE=$(date +%Y%m%d)        #输出当前日期,赋值给DATE变量,格式为20240627

SOURCE="abc.jar"        #当前jar名字赋值SOURCE变量
TARGET="backup/abc.jar.jew.$DATE"        #backup路径下abc.jar加当前日期后缀,备份

if [ -f "$SOURCE" ]; then        #如果SOURCE存在(-f:判断后边的路径是否是一个常规文件)
    cp "$SOURCE" "$TARGET"        #将SOURCE复制到TARGET,后缀有当前日期
fi        #语句结尾

rm -f abc.jar        #强制删除abc.jar
mv abc_1.jar abc.jar        #将abc_1.jar重命名为abc.jar 

pidNum=`ps -ef | grep $SOURCE | grep -v "grep"|awk '{print $2}'`

#ps -ef :查看正在运行的所有进程的完整信息;|:在这个结果的基础上;grep $SOURCE:查找文件里含有SOURCE(abc.jar)的信息;|:在这个结果的基础上;grep -v "grep":查找并去掉含有grep的进程;|:在这个结果的基础上;awk '{print $2}':格式化文本信息,输出第二个字段值,也就是进程号,赋值给pidNum。
if [ "$pidNum" = "" ];then        #如果进程号为空
    echo "not"        #输出not,就证明当前没有进程运行,可以直接启动
else        #不为空,有进程运行
    echo "pid : $pidNum"        #输出进程号
    kill -15 $pidNum        #退出进程
    echo "successfully"        #提示退出进程成功
fi        #语句结尾

nohup java -jar abc.jar > log.file 2>&1       

#nohup:确保进程登出或会话关闭后仍然运行java程序。java -jar abc.jar:运行java应用程序。 >:重定向输出。log.file:将被重定向到的文件。 2>&1:将标准错误重定向到标准输出的同一个地方(log.file),这样就可以将错误和信息都记录到同一个文件中。也可以最后多加一个&表示将命令放入后台运行。

---------------------------------------------------------------------------------------------------------------------------------

三、关于2>&1的问题

2是标准错误输入,1是标准输出。>&是一个整体,不能分开使用,否则就不是这个含义了。

还有 log.file、2、1的排列顺序,不能打乱:

> log.file 2>&1 含义:1本来指向屏幕,执行> log.file,1指向 log.file;执行2>&1,2指向1,而1指向 log.file,所以1和2都指向log.file。此时1和2都指向log.file

2>&1 > log.file 含义:1本来指向屏幕,执行2>&1,2指向1,而1指向屏幕,所以1和2都指向屏幕;执行> log.file,1指向log.file。此时只有1指向了log.file。(所以这样就会导致有错误输出的时候log.file没有记录!!!)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com