【问题标题】:Jenkins slave process on ubuntu not showing any loggingubuntu上的Jenkins从进程没有显示任何日志记录
【发布时间】:2015-04-15 15:45:24
【问题描述】:

我有一个专门用作 Jenkins 从属的 Ubuntu 虚拟机。我编写了一个单行脚本来运行从属 jar,并从 /etc/rc.local 运行该脚本。当我手动运行脚本时,我得到几行输出表明它正在工作。我尝试定义 rc.local 行和脚本,以便将 stdout/stderr 存储在一个文件中,但该文件的长度始终为零,修改时间为我启动进程的时间。

在下文中,一些字段用“=stuff=”省略。

我的“/etc/rc.local”的结尾是这样的:

su -c "/home/=user=/bin/jenkinsconnect" =user=
exit 0

“jenkinsconnect”脚本如下所示:

#! /bin/bash
java -jar /home/=user=/opnfv_slave_root/slave.jar -jnlpUrl https://=host=/ci/computer/att-build/slave-agent.jnlp -secret =secret= 2>&1 > /home/=user=/jc.log

正如我所说,“/home/=user=/jc.log”的长度始终为零,而 modtime 是我开始该过程的时间。

【问题讨论】:

  • 2>&1 > file 首先将 stderr 重定向到 stdout,然后(仅)重定向 stdout。您需要>file 2>&1首先将stdout重定向到文件,然后将stderr重定向到stdout指向的位置。

标签: java bash jenkins ubuntu-14.04


【解决方案1】:

2>&1 > file 语法不起作用。您应该:

  1. 使用&> 将stderr 和stdout 都指向一个文件,或者
  2. 用括号括住整个命令以捕获输出:

    (java -jar /home/=user=/opnfv_slave_root/slave.jar ... 2>&1) > /home/=user=/jc.log

【讨论】:

  • 检查我以前使用的这种语法,我现在意识到我一直在做“=process= > file 2>&1”,我认为这已经奏效了。不过,我喜欢能够在重定向指示符之后移动“> 文件”的想法,“(=process= 2>&1) > 文件”语法就是这样做的。我已更改脚本以使用该语法,并且它有效。
猜你喜欢
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-07
相关资源
最近更新 更多