Jenkins:bash脚本运行nohup既不工作也不写任何东西来记录

时间:2017-11-17 19:16:26

标签: linux bash ubuntu jenkins nohup

背景

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

  • develop-user (我出于多种原因创建的,例如测试,部署等)
  • jenkins (由jenkins ofcourse创建,我也将这个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的情况下手动运行此 bash脚本develop-user,但它运行正常。内容写入log file,我也可以使用生成的pid来终止进程。我也在我的本地环境中对此进行了测试,但它确实有效。

问题

我好几天都在看这个。这可能是什么根本原因?我可以在哪里查看一些日志或其他信息?如果生成pidlog文件为空,该怎么办?这是jenkins用户的permission问题吗?请帮忙。

2 个答案:

答案 0 :(得分:0)

所以,它原来是一个permission问题,而且脚本也不是executable我想在上面的评论中指出。

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

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

这很有效。

答案 1 :(得分:0)

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

BUILD_ID=dontKillMe <command> &