我有一个程序,我正在为 /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
),守护进程应该正在运行。
我认为期望返回适当的错误代码应该不会太难 - 请查看联机帮助页以获取更多信息。