首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >旋转catalina.out与旋转?

旋转catalina.out与旋转?
EN

Stack Overflow用户
提问于 2017-01-26 17:20:21
回答 1查看 1.3K关注 0票数 0

当catalina.out超过我帮助开发的专用安全设备的最大大小时,我正在尝试旋转它。我们目前对此任务使用log转速,但我试图使文件在达到大小限制时立即旋转,而不是依赖于每天的cron作业。

根据Tomcat常见问题,我应该尝试修补catalina.sh以将输出输送到一个命令就像这样。我们没有这个设备上的cronolog,但是我们有httpd,所以我决定使用rotatelogs

代码语言:javascript
复制
CATALINA_OUT_CMD="/usr/sbin/rotatelogs -f $CATALINA_OUT 100M >/dev/null 2>&1"

问题是catalina.out甚至没有在那里创建。我该怎么办?

下面是我的修补程序文件版本中允许管道传输到命令的部分:

代码语言:javascript
复制
@@ -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 "$@" 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 "$@" 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.如果有问题,我将使用以下修改后的"out命令“测试轮转,这样我就不必等待日志填充的时间了:

代码语言:javascript
复制
CATALINA_OUT_CMD="/usr/sbin/rotatelogs -f $CATALINA_OUT 1M >/dev/null 2>&1"

如果你们要求的话,我愿意再试一次log4j,但我上次试的时候没能成功。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-26 18:57:02

问得好。我不知道有什么办法能在一定的文件大小下强制旋转。这是有意义的,因为这意味着应用程序必须不断地运行和检查.但是,您可以增加日志旋转运行的频率并设置大小限制。如果它每15分钟运行一次,最大允许大小为50 MB,那么最多只能超过50 MB 15分钟。

您可以设置它在cron中运行的频率。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41879267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档