2011-04-20 75 views
8

我想运行一个脚本,停止并启动Tomcat在Linux上。当从哈德森运行Tomcat脚本不工作

当我从命令行运行它时,它工作正常。但是,当我在Jenkins/Hudson作业的“Execute Shell”构建步骤中运行相同的脚本时,它似乎不起作用。詹金斯不报告任何错误,但如果我尝试去tomcat页面,然后我得到一个页面未找到错误。

因此詹金斯似乎能够阻止服务器,但不能将其恢复。

我会很感激任何帮助。

+0

您会得到什么错误*完全*?它是404吗?或“连接拒绝”? – 2011-04-29 12:29:14

回答

18

试着在你的“shell执行取消设置BUILD_ID '块。在这种情况下,您甚至可能不需要使用nohup

BUILD_ID= 
./your_hudson_script_that_starts_tomcat.sh 
+1

谢谢,它看起来像改变BUILD_ID修复它。虽然我无法让你的例子工作,所以我尝试了这个[link](http://www.tikalk.com/alm/starting-tomcat-part-build-process-with-hudson-ci-0)似乎有窍门。 – 2011-05-10 22:02:33

+0

取消设置BUILD_ID也适用于我。 – excid3 2011-06-14 19:41:41

+0

是的,完美的作品,没有需要nohup – Anton 2013-11-06 17:08:11

1

没有看到您的脚本,很难给出确切的答案。但是你可以尝试添加以下到脚本的开始(假设它是一个bash脚本):

# Trace executed commands. 
set -x 

# Save stdout/stderr in files 
exec >/tmp/my_script.stdout 
exec 2>/tmp/my_script.stderr 

您也可以尝试加入

set -e 

使外壳立即退出,如果一个命令返回错误状态。

如果它看起来好像是哈德森杀死Tomcat的,那么你可能想的nohup内运行(如果你还没有这样做):

nohup bin/startup.sh >/dev/null 2>&1 & 
+0

如果我长时间睡眠然后尝试进入tomcat页面,则在作业完成之前它会显示OK。所以我想知道当一项工作完成时,Jenkins是否会自动杀死它开始的任何进程。 – 2011-04-20 19:15:09

+1

我在上面的回答中添加了一些关于nohup的内容(无法在此评论中对代码进行格式化)。希望这可能会有所帮助。 – 2011-04-20 22:01:56

+0

感谢您的快速响应。我用nohup调用创建了一个新脚本,就像你说的:'nohup /usr/tomcat5/bin/startup.sh>/dev/null 2>&1&'我得到了我的Jenkins实例来调用,但它仍然没有似乎工作。尽管手动运行脚本时它确实工作正常。 – 2011-04-26 11:19:58