【发布时间】:2016-11-04 11:20:56
【问题描述】:
我正在尝试捕获 Jenkins 启动脚本的输出,但我得到的只是一个空输出。
Jenkins的输出出现在终端
#!/bin/bash
function sendNotificationOnSlack() {
curl -X POST ...
}
export -f sendNotificationOnSlack
java -Dhudson.DNSMultiCast.disabled=true -jar /usr/local/opt/jenkins/libexec/jenkins.war --httpPort=3999 | awk '/Jenkins is fully up and running/ {system("bash -c sendNotificationOnSlack")}'
我什至尝试捕获 TTY 的输出,但显示为空
#!/bin/bash
currentTTY=$(tty)
echo $currentTTY
function sendNotificationOnSlack() {
curl -X POST ...
}
export -f sendNotificationOnSlack
java -Dhudson.DNSMultiCast.disabled=true -jar /usr/local/opt/jenkins/libexec/jenkins.war --httpPort=3999
tail -f $currentTTY | awk '/Jenkins is fully up and running/ {system("bash -c sendNotificationOnSlack")}'
我试图到处搜索,但找不到 jenkins.log 文件,有人有什么建议吗?
【问题讨论】:
-
我不完全确定这个问题,但如果你必须捕获输出,也许你应该让 Jenkins 在一个进程中生成并从另一个进程中捕获日志。也就是说,也许你应该
tee输出like so 到文件并从那里处理,删除管道到awk。awk可以用在tee写的文件上 -
另外,我假设您不希望日志落入
/var/log/jenkins/jenkins.log对吗? -
@alok 感谢您的回复。问题是输出没有被捕获,即使管道
awk显示在 shell 上(一个没有重定向但仍然指向同一个地方的标志)。我已经检查了/var/log/jenkins/,文件夹是空的 -
当输出通过管道传输到 awk 时,它只是标准输出。如果您确定 Jenkins/Java 进程已经生成,您可以使用
2>&1重试运行以将 stderr 重定向到 stdout 并将其重定向到您的 awk。我这样说是因为大多数 Java 服务器在 stderr 或 Java 术语中吐出日志:System.err