根据第二个命令的输出触发事件

根据第二个命令的输出触发事件

我正在使用 CF CLI 编写部署到 Cloud Foundry 的脚本,并且希望捕获与正在启动的新应用程序相关的日志以进行分析。这通常需要两个不同的命令,cf push [appname] -f [manifest.yml]并且cf logs [appname] > [appname].log。问题是,在推送命令进行到一半之前,应用程序还不存在,并且cf logs需要现有的应用程序才能成功运行。

我认为我的脚本会读取输出流以查找表明服务已创建的行,然后在第二个线程中cf push触发命令来捕获这些日志。cf logs我正在寻找一种机制,通过它我可以检查第二个进程的输出cf push并触发第二个进程。

两个问题

  • 这可能吗?
  • 这种东西应该叫什么名字,这样我才能找到一些关于合理方法的文档?

答案1

鉴于cf push序列仅在启动服务后完成(或者我想是在尝试中失败),您可以将一个管道链接在一起(用英语):“启动 cf 推送并查找“成功”消息;如果看到它,运行 cf 日志”。

在 shell 语法中,这将是(使用示例命令):

cf push [appname] -f [manifest.yml] | grep -q "service has been created" && \
 cf logs [appname] > [appname].log

这使用 shell 的管道cf push将 的输出与grep命令连接起来。 grep 命令(-q 表示安静)搜索成功消息(将我使用的字符串替换为cf push实际生成的字符串)。如果 grep 找到该消息,它将退出并返回成功代码;这将允许&&操作员运行cf logs命令。如果 grep 不成功,&&操作员将不是运行cf logs命令。我\&&只是为了很好地包装代码之后使用了反斜杠;命令可以全部在一行上。

如需更多阅读,请参阅shell 的控制和重定向运算符是什么?

相关内容