
У меня есть простой скрипт upstart для tomcat. Вот шаблон 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
Theкулинарная книга upstartдает объяснение происходящему. Короче говоря, "Стандартный вывод и стандартная ошибка ... автоматически регистрируются в файле в каталоге /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.