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

7 篇文章 0 订阅

场景

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:

#!/bin/sh
echo 'start jfqqq.jar'
nohup java -jar jfqqq.jar --server.port=8888 --logging.level.root=info  &
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'
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时,想换行

这三个都无法直接回车:

echo \n--------------- start succeed! ----------------------
echo \\n--------------- start succeed! ----------------------
echo '\n--------------- start succeed! ----------------------'
echo "\n--------------- start succeed! ----------------------"

效果:

 这样可以:

echo -e '\n--------------- start succeed! ----------------------'
echo -e "\n--------------- start succeed! ----------------------"

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值