【问题标题】:Tomcat script not working when run from Hudson从 Hudson 运行时 Tomcat 脚本不起作用
【发布时间】:2011-04-20 10:32:44
【问题描述】:

我正在尝试运行一个在 linux 上停止和启动 Tomcat 的脚本。

当我从命令行运行它时,它工作正常。但是,当我从 Jenkins/Hudson 作业中的“执行 Shell”构建步骤运行相同的脚本时,它似乎不起作用。 Jenkins 没有报告任何错误,但如果我尝试转到 tomcat 页面,则会收到页面未找到错误。

所以 Jenkins 似乎能够停止服务器,但无法将其恢复。

如果有任何帮助,我将不胜感激。

【问题讨论】:

  • 确切地遇到了什么错误?是404吗?还是“连接被拒绝”?

标签: linux tomcat hudson jenkins


【解决方案1】:

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

BUILD_ID=
./your_hudson_script_that_starts_tomcat.sh

【讨论】:

  • 谢谢,看来更改 BUILD_ID 已修复。虽然我无法让您的示例正常工作,但我尝试了这个 link,这似乎可以解决问题。
  • 嘿,你能解释一下这里的BUILD_ID是什么意思吗?我不太明白。非常感谢:]
  • BUILD_ID 是 Jenkins 设置的环境变量,可用于由 jenkins 构建作业生成的进程。以下是取消设置 BUILD_ID 使生成的进程保持运行的一些详细信息:wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller
  • @Bernhard :非常感谢您的解决方案,它帮助了面临同样问题的新手 :) 但我不明白它背后的基本原理.. build_id 与启动 tomcat 有什么关系或任何脚本?再次感谢
【解决方案2】:

如果没有看到您的脚本,很难给出准确的答案。但是,您可以尝试将以下内容添加到脚本的开头(假设它是 bash 脚本):

# Trace executed commands.
set -x

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

您也可以尝试添加

set -e

如果命令返回错误状态,则立即退出 shell。

如果看起来 Hudson 正在杀死 Tomcat,那么您可能希望在 nohup 中运行它(如果您还没有这样做的话):

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

【讨论】:

  • 如果我长时间睡眠然后尝试进入 tomcat 页面,它看起来没问题,直到作业完成。所以我想知道 Jenkins 是否会在作业完成时自动终止它启动的任何进程。
  • 我在上面的答案中添加了一些关于 nohup 的内容(无法在此评论中格式化代码)。希望这可能会有所帮助。
  • 感谢您的快速回复。我用你说的 nohup 调用创建了一个新脚本:nohup /usr/tomcat5/bin/startup.sh >/dev/null 2>&1 & 我让我的 Jenkins 实例调用它,但它似乎仍然不起作用。虽然当我手动运行脚本时它确实可以正常工作。
猜你喜欢
  • 2013-09-18
  • 2015-10-12
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
  • 2018-02-15
  • 2013-01-21
  • 1970-01-01
  • 2016-04-01
相关资源
最近更新 更多