2

我有一个用于跟踪日志文件以确定服务器是否已启动的脚本,它是这样的:

echo "Starting server."
./start_server.sh

sleeptime=0
while [ ${sleeptime} -lt 60 ]
do
    sleep 5

    serverlog=$(tail -n 5 ./server.log)
    echo ${serverlog} | grep -iq "Server startup"

    if [ $? = 0 ]
    then
        echo "Server startup successful"
        exit 0
    fi

    let sleeptime=sleeptime+5
done

echo "Warning: server startup status unknown."
exit 1

当我运行脚本(./start_server.sh)时,脚本退出正常。但是,当我将它传送到 tee (./start_server.sh | tee -a serverstartup.log) 时,除非我强制执行 (ctrl + C),否则脚本不会结束。

为什么流水线到 tee 时脚本不退出?

4

2 回答 2

1

服务器脚本产生了一个永远不会终止的子进程,因为它启动了一个守护进程。tee 正在等待子进程终止,从而导致此问题。

更多细节在这里:为什么 tee 等待所有子shell完成?

于 2013-09-04T15:46:18.533 回答
-1

改变 :

while [ ${sleeptime} -lt 60 ]

while [ ${sleeptime} -le 60 ]
于 2013-08-15T20:54:36.280 回答