【问题标题】:Jenkins : bash script ran with nohup is neither working nor writing anything to log詹金斯:使用 nohup 运行的 bash 脚本既不工作也不写任何日志
【发布时间】:2018-05-01 15:37:30
【问题描述】:

背景

我想在这里适当地解释一下这个场景。 我正在使用 ubuntu 16.04 在我的云服务器中运行 jenkins_2.73.3。 目前,服务器中有 3 个用户

  • develop-user (我创建它的原因有很多,例如测试、部署等)
  • jenkins (当然是jenkins创建的,我也把这个jenkins用户加入了sudoers组)

问题

我有一个 bash 脚本,我从 Jenkins 中的构建步骤调用它。在这个bash 脚本中,有一个nohup 命令用于在后台调用一个单独的deployScript,例如:

#!/bin/bash
nohup deployScript.sh > $WORKSPACE/app.log 2>&1 & echo $! > save_pid.txt

构建步骤完成后,我看到save_pid.txt 内部生成了一个id,但app.log 却是空的。我不能用这个生成的pid 杀死任何进程。所以,这意味着这里首先没有创建任何进程。此外,deployScript.sh 似乎根本没有任何效果。它只是不工作。每次我在 Jenkins 中运行构建时都会发生这种情况。我可以保证deployScript.sh 没有任何问题。

我尝试在不使用 Jenkins 的情况下手动使用 develop-user 运行此 bash 脚本,它运行良好。内容写入log file,我也可以使用生成的pid 来终止进程。我也在本地环境中对此进行了测试,并且可以正常工作。

问题

我已经看了好几天了。这里的根本原因可能是什么?我在哪里可以查看一些日志或其他信息? pid 是如何生成的,而 log 文件是空的?这是 jenkins 用户的permission 问题吗?请帮忙。

【问题讨论】:

  • 您确定 $WORKSPACE 设置正确吗?
  • 也许重定向来自/dev/null的输入:nohup < /dev/null > $WORKSPACE/app.log 2>& 1 deployScript.sh?否则您是否检查过$WORKSPACE 的值是否正确且deployScript.sh 是可执行的并且可以在调用它的位置在命令搜索$PATH 中找到?
  • @Nic3500,是的,我想是的。运行构建步骤时,会在 WORKSPACE 中自动创建“app.log”,但它是空的。
  • echo $! > save_pid.txt 换行了吗?
  • 你能在没有nohup(如deployScript.sh > $WORKSPACE/app.log 2>&1)和其他脚本(nohup echo "Jenkins test $(date)" > $WORKSPACE/app.log 2>&1 )的情况下进行测试吗?

标签: linux bash ubuntu jenkins nohup


【解决方案1】:

所以,结果证明是权限问题,而且脚本不可执行,我猜如上面的 cmets 中所指出的那样。

所以,现在 bash 脚本如下所示:

#!/bin/bash
sudo chmod a+x deployScript.sh
sudo nohup deployScript.sh > $WORKSPACE/app.log 2>&1 & echo $! > save_pid.txt

这行得通。

【讨论】:

    【解决方案2】:

    您可以在 jenkins 的执行 shell 中使用以下行在后台运行它,而不会杀死进程。

    BUILD_ID=dontKillMe <command> &
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      • 1970-01-01
      相关资源
      最近更新 更多