web-dev-qa-db-ja.com

Ubuntu:Tomcatアップスタートスクリプト。ログは最終的にupstartログに記録されます

Tomcat用の簡単なupstartスクリプトがあります。シェフのテンプレートは次のとおりです。

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に書き込まれます。すべてのログが起動ログに記録される理由はありますか?それを回避するための良い方法は何ですか?これはubuntu12.04にあります

1
Joe

pstart Cookbook は、何が起こっているのかを説明しています。つまり、「標準出力と標準エラーは...ディレクトリ/ 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でプロセスを正しく管理することができませんでした。 「expectfork」も「expectdaemon」も、catalina起動スクリプトから作成されたバックグラウンドプロセスを管理できませんでした。

2
Josh