Ubuntu:Tomcat upstart 脚本。日志最终位于 upstart 日志中

Ubuntu:Tomcat upstart 脚本。日志最终位于 upstart 日志中

我有一个简单的 tomcat upstart 脚本。以下是 chef 模板:

description "Tomcat Server"

  start on runlevel [2345]
  stop on runlevel [!2345]
  respawn
  respawn limit 10 5

  # run as non privileged user 
  # add user with this command:
  ## adduser --system --ingroup www-data --home /opt/apache-tomcat apache-tomcat
  setuid "<%= node['tomcat']['user'] %>"
  setgid "<%= node['tomcat']['group'] %>"

  # paths:
  env JAVA_HOME="<%= node["java"]["home"] %>"
  env CATALINA_BASE="<%= node["tomcat"]["base"] %>"
  env CATALINA_HOME="<%= node["tomcat"]["home"] %>/current"

  exec $CATALINA_HOME/bin/catalina.sh run

  # cleanup temp directory after stop
  post-stop script 
    rm -rf $CATALINA_HOME/temp/*
  end script

从 init 脚本切换到上面发布的 upstart 脚本后,所有 tomcat 日志都写入 /var/log/upstart/tomcat。所有日志都进入 upstart 日志有什么原因吗?有什么好方法可以解决这个问题?这是在 ubuntu 12.04 上

答案1

新贵食谱解释发生了什么。简而言之,“标准输出和标准错误...自动记录到目录 /var/log/upstart/ 中的文件中”。'catalina.sh run' 命令将所有输出发送到 stdout。因此,upstart 将 stdout 重定向到 upstart 日志。

我采取了以下方法解决这个问题:

# Manually specify CATALINA_OUT, so we can redirect ourselves
env CATALINA_OUT=<path to catalina_base>/logs/catalina.out

# Stop upstart from handling stdout/stderr & redirect to the log file ourselves
console none
exec $CATALINA_HOME/bin/catalina.sh run >> "$CATALINA_OUT" 2>&1

我尝试执行“catalina.sh start”,如果你查看 catalina 脚本,会发现它将输出重定向到 CATALINA_OUT 本身。但是,我无法让 upstart 正确管理该进程。“expect fork”和“expect daemon”都无法管理从 catalina 启动脚本创建的后台进程。

相关内容