
我有一個簡單的 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 日誌有什麼原因嗎?解決這個問題的好方法是什麼?這是在 ubuntu 12.04 上
答案1
這新貴食譜提供了對正在發生的事情的解釋。簡而言之,「標準輸出和標準錯誤......自動記錄到目錄 /var/log/upstart/ 中的檔案」。 “catalina.sh run”指令將所有輸出傳送到標準輸出。因此,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本身。但是,我無法讓暴發戶正確管理流程。 「expect fork」和「expect daemon」都無法管理從 catalina 啟動腳本建立的後台程序。