linux - 如何等待程序启动然后后台呢?

标签 linux bash

<分区>

我有一个程序,我正在为 /etc/init.d 编写脚本。

问题是,程序不会 self 消除。启动它大约需要 5 秒,当它初始化后,它会向标准输出打印一个字符串(“Started OK”)。

我正在寻找创建启动进程的脚本,等待字符串出现一段时间,然后继续脚本,指示失败或成功(找到字符串)。

显然这不能如我所愿。

daemon $PROGRAM &

相当

(./proc > some_output) &
poll_output_for "Started OK" 10 secs or die

最佳答案

我认为您可以使用 expect 来做这样的事情:参见 http://expect.sourceforge.net/http://en.wikipedia.org/wiki/Expect .这在许多发行版的存储库中,例如在 Ubuntu 上,您可以apt-get install expect

他是一个模拟你守护进程的脚本:

#/usr/bin/env /bin/bash
# daemon.sh

sleep 2
echo Started OK
while :; do sleep 1; echo '.' >> daemon.log; done

...这是一个等待输出然后退出的期望脚本:

#!/usr/bin/env /usr/bin/expect

spawn -ignore SIGHUP ./daemon.sh
expect "Started OK"

直到“Started OK”通知到达,Expect 才会返回。当它关闭时,守护进程收到一个 SIGHUP,但我们忽略了它,所以它继续运行。如果您检查日志文件 (watch cat daemon.log),守护进程应该正在运行。

我认为期望返回适当的错误代码应该不会太难 - 请查看联机帮助页以获取更多信息。

关于linux - 如何等待程序启动然后后台呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21604413/

相关文章:

linux - 如何使用 Bash 脚本仅在 perl 脚本中插入一行新代码

linux - 如何在 Openshift 中安装 FFMPEG?

字符设备捕获多个 (int) ioctl 参数

bash - Cygwin 将文本换回到同一行,导致文本被覆盖

linux - 如果服务器在我登录时打印字符串,如何在 MobaXterm 中打开 sftp 面板?

xcode - 将 TODO 注释显示为警告,不包括 Pods 文件夹

xml - Bash:将 XML block 解析为数组

php - 从 4 个相同的 Web 服务器中的 1 个运行 Cron 作业,所有这些服务器都具有相同的作业

linux - 从内核模块读取 x86 MSR

bash - Perl $ENV 不访问环境变量