2017-01-26 4 views
0

Я пытаюсь повернуть catalina.out, когда он превосходит максимальный размер на специальном устройстве безопасности, которое я помогаю развиваться. В настоящее время мы используем logrotate для этой задачи, но я пытаюсь заставить файл вращаться сразу, когда он достигает предела размера, вместо того, чтобы полагаться на ежедневное задание cron.Вращайте каталину с ротатогами?

В соответствии с the Tomcat FAQ, я должен попробовать исправить catalina.sh для вывода трубы в команду, like so. У нас нет cronolog на этом устройстве, но у нас есть HTTPD, поэтому я решил использовать rotatelogs:

CATALINA_OUT_CMD="/usr/sbin/rotatelogs -f $CATALINA_OUT 100M >/dev/null 2>&1" 

Проблема заключается в том, что catalina.out даже не создал там. Что мне делать?

Вот часть моей версии файла патч, который позволяет трубопровод к командам:

@@ -33,6 +33,13 @@ 
#     will be redirected. 
#     Default is $CATALINA_BASE/logs/catalina.out 
# 
+# CATALINA_OUT_CMD (Optional) Command which will be executed and receive 
+#     as its stdin the stdout and stderr from the Tomcat java 
+#     process. Only used if CATALINA_OUT is not defined. 
+#     No default. 
+#     Example (all one line) 
+#     CATALINA_OUT_CMD="cronolog $CATALINA_BASE/logs/catalina.%Y-%m-%d.out >/dev/null 2>&1" 
+# 
# CATALINA_OPTS (Optional) Java runtime options used when the "start", 
#     "run" or "debug" command is executed. 
#     Include here and not in JAVA_OPTS all options, that should 
@@ -367,13 +374,22 @@ elif [ "$1" = "start" ] ; then 
fi 

shift 
- touch "$CATALINA_OUT" 
+ if [ -z "$CATALINA_OUT_CMD" ] ; then 
+ catalina_out_command=">> \"$CATALINA_OUT\" 2>&1" 
+ else 
+ catalina_out_command="| $CATALINA_OUT_CMD" 
+ fi 
+ if [ ! -z "$CATALINA_PID" ]; then 
+ catalina_pid_file="$CATALINA_PID" 
+ else 
+ catalina_pid_file=/dev/null 
+ fi 
if [ "$1" = "-security" ] ; then 
if [ $have_tty -eq 1 ]; then 
echo "Using Security Manager" 
fi 
shift 
- eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ 
+ eval \{ "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ 
-Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \ 
-Djava.security.manager \ 
-Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \ 
@@ -381,21 +397,17 @@ elif [ "$1" = "start" ] ; then 
-Dcatalina.home="\"$CATALINA_HOME\"" \ 
-Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ 
org.apache.catalina.startup.Bootstrap "[email protected]" start \ 
-  >> "$CATALINA_OUT" 2>&1 "&" 
+  2\>\&1 \& echo \$! \>\"$catalina_pid_file\" \; \} $catalina_out_command "&" 

else 
- eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ 
+ eval \{ "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ 
-Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \ 
-Dcatalina.base="\"$CATALINA_BASE\"" \ 
-Dcatalina.home="\"$CATALINA_HOME\"" \ 
-Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ 
org.apache.catalina.startup.Bootstrap "[email protected]" start \ 
-  >> "$CATALINA_OUT" 2>&1 "&" 
- 
- fi 
+  2\>\&1 \& echo \$! \>\"$catalina_pid_file\" \; \} $catalina_out_command "&" 

- if [ ! -z "$CATALINA_PID" ]; then 
- echo $! > "$CATALINA_PID" 
fi 

echo "Tomcat started." 

P.S. В случае, если это имеет значение, я тестирую вращение со следующим, модифицированной «из команды», так что мне не придется ждать до тех пор, для журнала, чтобы заполнить:

CATALINA_OUT_CMD="/usr/sbin/rotatelogs -f $CATALINA_OUT 1M >/dev/null 2>&1" 

P.P.S. Я был бы готов снова попробовать log4j, если вы, ребята, спросите меня, но я не смог получить эту работу в последний раз, когда пытался.

ответ

1

Большой вопрос. Я не знаю, как заставить вращение в определенном файле. Что имеет смысл, так как это означает, что приложение должно постоянно работать и проверять ... но вы можете просто увеличить скорость выполнения логротата и установить ограничения по размеру. Если он запускается каждые 15 минут с максимальным разрешенным размером 50 МБ, то он не может превышать 50 МБ в течение 15 минут.

Вы можете установить, как часто он работает в cron.

+0

Я не уверен, что я понимаю вашу математику в конце (что, если есть массивный дамп журнала, который составляет 100 МБ или что-то в этом роде), но я думаю, что я могу прибегнуть к этому. Вы уверены, что с log4j ничего не может быть сделано? – jajavoli

+0

Пересчитанная математика: «она может преодолевать предел только на 15 минут», не могу сказать, для log4j; Я могу сказать, что вы можете просто написать скрипт, чтобы проверять его каждую минуту (или секунду), а затем принудительно лог вращать. Не нужно брать слишком много ресурсов, чтобы просто запустить «ls -l» в вашем файле и написать функцию «if» для его размера ». Как своего рода ответ, я могу сказать, что у меня есть опыт работы с журналом Catalina. И они могут стать огромными, но через неделю или две вы всегда знаете, что шаблон, который будет таким логротатом, может быть настроен правильно. Если разработчик не устанавливает «отладки и забывает ...», lol. – bashCypher