当前位置: 首页 > news >正文

一个启动脚本例子

一、全部代码 

#!/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没有记录!!!)

http://www.lryc.cn/news/388377.html

相关文章:

  • grpc学习golang版( 六、服务器流式传输 )
  • ubuntu语音库ALSA报错具体原因
  • Java高级重点知识点-17-异常
  • DM达梦数据库函数分析(与mysql对应函数区别及用法分析)
  • ROS2用c++开发参数节点通信
  • docker 部署jitsi meet
  • 【Pytest自动化测试详解】
  • 6-14题连接 - 高频 SQL 50 题基础版
  • 深度挖掘数据资产,洞察业务先机:利用先进的数据分析技术,精准把握市场趋势,洞悉客户需求,为业务决策提供有力支持,实现持续增长与创新
  • 亚马逊广告如何设置关键词竞价获取最优广告投入产出比 (ACOS)
  • vision mamba-yolov8:结合Vmamba的yolov8目标检测改进实现
  • 2025秋招NLP算法面试真题(十一)-Transformer的并行化
  • 如何在本地一键配置最强国产大模型
  • 代码随想录算法训练营第九天|151.翻转字符串里的单词、右旋字符串、28. 实现 strStr()、459.重复的子字符串
  • 第6天:文件操作和异常处理
  • 关于freesql 频繁报“【主库】状态不可用,等待后台检查程序恢复方可使用”异常的解决。
  • Spring Boot中如何使用Flyway进行数据库版本控制
  • 心理学|人格心理学——人格心理学单科作业(中科院)
  • 第三方服务提供商的五大风险
  • 海康视频播放,包含h5和web插件
  • 数据库-python SQLite3
  • FFMpeg rtmp 推送本地yuv文件
  • websocket使用,spring boot + vite + vue3
  • 基础位运算
  • 性价比高真无线蓝牙耳机有哪些?性价比真无线蓝牙耳机推荐
  • Big Data Tools插件
  • 两个li标签之间有空格这是什么原因
  • 使用Colly库进行高效的网络爬虫开发
  • 【C#】制作图集
  • 行列视报表系统制作的报表与厂级监控信息系统(SIS)系统中的报表有什么区别?