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 スタートアップ スクリプトから作成されたバックグラウンド プロセスを管理できませんでした。

関連情報