우분투: Tomcat 시작 스크립트. 로그는 시작 로그에 남습니다.

우분투: Tomcat 시작 스크립트. 로그는 시작 로그에 남습니다.

Tomcat에 대한 간단한 시작 스크립트가 있습니다. 요리사 템플릿은 다음과 같습니다.

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 로그에 들어가는 이유가 있나요? 이 문제를 해결하는 좋은 방법은 무엇입니까? 이것은 우분투 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 스크립트를 보면 출력을 CATALINA_OUT 자체로 리디렉션하는 'catalina.sh start'를 실행하려고 했습니다. 그러나 저는 스타트업이 프로세스를 올바르게 관리하도록 할 수 없었습니다. 'expect fork'나 'expect daemon' 모두 catalina 시작 스크립트에서 생성된 백그라운드 프로세스를 관리할 수 없습니다.

관련 정보