【发布时间】: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