首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在“控制台输出”中包括工作区.log文件

在“控制台输出”中包括工作区.log文件
EN

Stack Overflow用户
提问于 2015-05-14 15:53:58
回答 1查看 1.7K关注 0票数 0

我有一个Jenkins作业,它执行"foo.sh“和"bar.sh",这些脚本分别生成"foo.log”和"bar.log“。foo.sh和bar.sh是长期运行的作业,我不想在jenkins的"Console Output“视图中统一查看它们的日志文件。

我知道我可以将这些日志存档为构建工件,但我希望从一个视图控制台输出监视所有3条日志(“控制台输出”/stdout、foo.log和bar.log)。

是否有一个插件或配置选项可以让我这样做?

注意:foo.shbar.sh显然是占位符,但恐怕它们来自供应商,我不能修改它们来调整日志记录行为。

EN

回答 1

Stack Overflow用户

发布于 2015-05-14 15:59:09

假设您的文件在$WORKSPACE

tail -F *.log

编辑:

或者您可以考虑重写您的foo.shbar.sh,而不是重定向到日志文件,而是将tee重定向到控制台和日志文件。

echo "doing stuff" 2>&1|tee -a foo.log

上面将打印到控制台(在Jenkins控制台输出中显示),然后重定向到foo.log

编辑2:

如果您无法控制foo.shbar.sh,您将需要一个包装脚本来用一些技巧启动它们。

基本上,在将foo.sh发送到后台(以便我们可以继续)之后,在tail日志之前,您需要确保tail将被杀死。为此,我们启动了另一个后台进程来监视foo.sh进程并杀死tail (该进程尚未在脚本中启动)。因为我们还没有启动tail,所以我们不知道它的PID是什么,因此我们通过命令行引用它

代码语言:javascript
复制
# Send foo.sh to background and record the PID
echo "Launching foo.sh to background"
nohup ./foo.sh &
foo_pid=$!
echo "Foo PID to monitor=$foo_pid"

# Launch a statement that will run ever 3 seconds to monitor status 
# of foo.sh, and if foo.sh finished, then kill a 'future' tail command
echo "Launching tail-killer to background"
nohup $(sleep 3; while kill -0 $foo_pid; do sleep 3; done; kill $(ps --no-heading -C "tail -F foo.log" | awk '{print $1}') ) &

# Tail foo.sh's log
echo "Launching tail to monitor foo.sh"
echo
tail -F foo.log
echo

# Get the return code of foo.sh
wait $foo_pid
echo "Foo.sh returned with $?

Considerations/improvements:

  • “杀手”进程每3秒运行一次。出于性能上的原因,您可能想要增加这个值。
  • Foo.sh在启动后,在调用tail之前,可以打印超过10行。使用tail -n增加起跑线数。
  • 如果检测到多个tail -F foo.log,“杀手”就会崩溃。您应该修改它以使其更健壮。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30241757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档