gpt4 book ai didi

shell - 循环 shell 脚本直到成功的日志消息

转载 作者:行者123 更新时间:2023-12-01 00:26:50 25 4
gpt4 key购买 nike

我正在尝试获取一个 shell 脚本来识别应用程序实例何时出现。这样它就可以继续发出命令。

我一直在想它会是这样的:

#/bin/bash

startApp.sh

while [ `tail -f server.log` -ne 'regex line indicating success' ]
do

sleep 5

done

echo "App up"

但是,即使这有效,也无法解决一些问题:

  • 如果应用程序没有出现怎么办,要等多久
  • 如果启动应用程序时出现错误怎么办
  • 如何捕获日志行并回显它

我接近了吗,还是有更好的方法?我想这是其他管理员必须克服的问题。

编辑:

我在 super 用户上找到的

https://superuser.com/questions/270529/monitoring-a-file-until-a-string-is-found

tail -f logfile.log | while read LOGLINE
do
[[ "${LOGLINE}" == *"Server Started"* ]] && pkill -P $$ tail
done

我唯一的问题是它可能永远不会退出。有没有办法添加最长时间?

最佳答案

好的,第一个答案很接近,但没有说明我认为可能发生的一切。

我从这个链接改编了代码:

Ending tail -f started in a shell script

这是我想出的:

#!/bin/bash

instanceDir="/usr/username/server.name"
serverLogFile="$instanceDir/server/app/log/server.log"

function stopServer() {

touch ${serverLogFile}

# 3 minute timeout.
sleep 180 &
local timerPid=$!

tail -n0 -F --pid=${timerPid} ${serverLogFile} | while read line
do
if echo ${line} | grep -q "Shutdown complete"; then
echo 'Server Stopped'
# stop the timer..
kill ${timerPid} > /dev/null 2>&1
fi
done &

echo "Stoping Server."
$instanceDir/bin/stopserver.sh > /dev/null 2>&1

# wait for the timer to expire (or be killed)
wait %sleep


}

function startServer() {

touch ${serverLogFile}

# 3 minute timeout.
sleep 180 &
local timerPid=$!

tail -n0 -F --pid=${timerPid} ${serverLogFile} | while read line
do
if echo ${line} | grep -q "server start complete"; then
echo 'Server Started'
# stop the timer..
kill ${timerPid} > /dev/null 2>&1
fi
done &

echo "Starting Server."
$instanceDir/bin/startserver.sh > /dev/null 2>&1 &

# wait for the timer to expire (or be killed)
wait %sleep

}

stopServer
startServer

关于shell - 循环 shell 脚本直到成功的日志消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12413716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com