• 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! ----------------------"

     

  • 相关阅读:
    JS逆向 | 推特x-guest-token
    macos (M2芯片)搭建flutter环境
    游戏社区-搭建的目的和意义是什么
    基于springboot+mybatis学生管理系统
    开源项目的版本管理:Git的最佳实践
    .NET应用系统的国际化-整体设计思路
    【Javascript】json
    Week2:包含 min 函数的栈
    【C++】C++中的IO流
    纸牌博弈问题
  • 原文地址:https://blog.csdn.net/jfqqqqq/article/details/126519666