linux - 等到服务在 bash 脚本中启动

标签 linux bash

我有一个在后台启动某些服务的 bash 脚本。此服务成功启动后,它会将“服务器处于事件状态”打印到标准输出。我需要等到这个字符串出现,然后继续执行我的脚本。我怎样才能做到这一点?

最佳答案

我会这样做。

./server > /tmp/server-log.txt &
sleep 1
while ! grep -m1 'Server is active' < /tmp/server-log.txt; do
    sleep 1
done

echo Continue

此处 -m1 告诉 grep(1) 在第一次匹配时退出。

我用下面的玩具“服务”验证了我的答案:

#! /bin/bash

trap "echo 'YOU killed me with SIGPIPE!' 1>&2 " SIGPIPE

rm -f /tmp/server-output.txt
for (( i=0; i<5; ++i )); do
    echo "i==$i"
    sleep 1;
done
echo "Server is active"
for (( ; i<10; ++i )); do
    echo "i==$i"
    sleep 1;
done
echo "Server is shutting down..." > /tmp/server-output.txt

如果将 echo Continue 替换为 echo Continue; sleep 1; ls/tmp/server-msg.txt,你会看到 ls: cannot access/tmp/server-output.txt: No such file or directory 这证明“继续”操作是在 Server is active 的输出后立即触发。

关于linux - 等到服务在 bash 脚本中启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21475639/

相关文章:

linux - 检查哪个脚本在/tmp 中创建文件

linux - 从文件中删除特定数据

bash 将前导零添加到计数中

linux - 在 bash cron 中处理不同的目录

linux - 删除特定文件并保留一些

linux - 如何在创建 Latex 文件的同一目录中自动创建 makefile?

c - 使用管道实现异步行为

c - 如何安装信号处理程序名称 sig_handler

linux - 用于将目录结构从源目录复制到目标目录的 Bash 脚本

c - 如何在我的项目中使用 Linux like CONFIG_* 配置?