• sh启动jar后判断启动成功后退出


    场景

    1. 编写一个start.sh脚本,使用jar启动springboot工程

    2. 想要启动后,脚本自动退出

    3. 最好是判断出启动成功了,再退出

    设计

    1. 利用nohup实现守护进程和&实现可以退出当前窗口

    2. 利用tail -fn  --pid 追查文件最新末尾,并且只看新输入的变动(n 0控制的),并且在pid指定的进程完成后,退出tail。

    备注:

    1. 不使用n 0的话,只用tail -f,会导致先加载文件的内容到末尾,此时如果sed有匹配的内容,就会直接退出了。使用n 0就可以永远只监听最新新输入的变动,从而避免这个情况。

    3. 使用sed匹配关键字,并搭配/q,在匹配到内容后退出sed进程。

    demo

    启动jfqqqq.jar:

    1. #!/bin/sh
    2. echo 'start jfqqq.jar'
    3. nohup java -jar jfqqq.jar --server.port=8888 --logging.level.root=info &
    4. tail -fn 0 --pid=`ps uxh|grep "sed /Started jfqqq in/Q"|grep -v "grep" | awk '{ print $2 } ' | sort -nr | head -1 ` nohup.out|sed '/Started jfqqq in/Q'
    5. echo 'start succeed!'

    完成

    tips:

    1. sed 匹配时,匹配内容使用‘’和不使用‘’号下,空格可以有两种表达:

    A. sed '/Started Viewer in/Q'

    B. sed /Started[[:space:]]Viewer[[:space:]]in/Q

    2. 针对1,grep时,可以不考虑单引号“’”

    比如:

    tail -fn 0 --pid=`ps uxh|grep "sed /Started Viewer in/Q"|grep -v "grep" | awk '{ print $2 } ' | sort -nr | head -1 ` nohup.out|sed '/Started Viewer in/Q'
    

    里边grep处的sed /Started...就没有写为"sed '/Started",虽然后边的sed命令使用了"'"。

    3. echo时,想换行

    这三个都无法直接回车:

    1. echo \n--------------- start succeed! ----------------------
    2. echo \\n--------------- start succeed! ----------------------
    3. echo '\n--------------- start succeed! ----------------------'
    4. echo "\n--------------- start succeed! ----------------------"

    效果:

     这样可以:

    1. echo -e '\n--------------- start succeed! ----------------------'
    2. echo -e "\n--------------- start succeed! ----------------------"

     

  • 相关阅读:
    软件设计模式系列之四——简单工厂模式
    Day26、认识数据库
    sock锁文件导致的MySQL启动失败
    强化学习简介
    [鹏城杯 2022]简单的php - 无数字字母RCE+取反【*】
    【云原生】Kafka在window里运行入门篇
    函数式编程:一等对象、作用域和高阶函数的综合指南
    电商前台项目(一):项目前的初始化及搭建
    GraphSAGE-pytorch-inductive
    360度 EC11 旋转编码器模块 数字脉冲电位器
  • 原文地址:https://blog.csdn.net/jfqqqqq/article/details/126519666