背景
我想在这里正确解释这个场景。 我在 ubuntu 16.04 的云服务器上运行 jenkins_2.73.3 。 目前,服务器中有 3个用户:
问题
我有一个 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
来终止进程。我也在我的本地环境中对此进行了测试,但它确实有效。
问题
我好几天都在看这个。这可能是什么根本原因?我可以在哪里查看一些日志或其他信息?如果生成pid
而log
文件为空,该怎么办?这是jenkins用户的permission
问题吗?请帮忙。
答案 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> &