logrotate 不旋转 catalina.out
logrotate doesn't rotate catalina.out
我正在尝试使用 logrotate 每天自动轮换出 tomcat 的 catalina.out,即使我可以手动调用 logrotate 并且它工作正常。我正在使用我已经尝试了所有解决方案,但我无法让它旋转。我在 Oracle Linux 7.5 上,它基本上是 RHEL 7。
以下是我采取的步骤:
我创建了一个文件 /etc/logrotate.d/tomee.conf,如下所示:
/apache-tomee-plus-7.0.4/logs/catalina.out
{
su opc opc
daily
rotate 7
compress
notifempty
missingok
copytruncate
}
我可以手动执行 logrotate,使用 sudo /usr/sbin/logrotate /etc/logrotate.conf
效果很好
我也尝试使用 sudo /usr/sbin/logrotate -d /etc/logrotate.conf
进行调试并且输出没有错误
...
rotating pattern: /apache-tomee-plus-7.0.4/logs/catalina.out
after 1 days (7 rotations)
empty log files are not rotated, old logs are removed
switching euid to 1000 and egid to 1000
considering log /apache-tomee-plus-7.0.4/logs/catalina.out
log needs rotating
rotating log /apache-tomee-plus-7.0.4/logs/catalina.out, log->rotateCount is 7
dateext suffix '-20181211'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
copying /apache-tomee-plus-7.0.4/logs/catalina.out to /apache-tomee-plus-7.0.4/logs/catalina.out-20181211
truncating /apache-tomee-plus-7.0.4/logs/catalina.out
compressing log with: /bin/gzip
switching euid to 0 and egid to 0
...
但它仍然不会每天自动执行。
我也知道logrotate是运行,因为根据/var/lib/logrotate/logrotate.status
,其他日志都在轮转,但不是catalina.out
cat /var/lib/logrotate/logrotate.status
logrotate state -- version 2
"/var/log/yum.log" 2018-11-29-18:44:14
"/var/log/up2date" 2018-9-17-19:0:0
"/apache-tomee-plus-7.0.4/logs/catalina.out" 2018-12-8-0:37:14
"/var/log/chrony/*.log" 2018-9-17-19:0:0
"/var/log/wtmp" 2018-12-3-17:48:49
"/var/log/spooler" 2018-11-29-18:44:14
"/var/log/btmp" 2018-12-3-17:48:49
"/var/log/iscsiuio.log" 2018-9-17-19:0:0
"/var/log/maillog" 2018-12-11-3:7:1
"/var/log/secure" 2018-12-11-3:7:1
"/var/log/messages" 2018-12-11-3:7:1
"/var/account/pacct" 2018-9-17-19:0:0
"/var/log/cron" 2018-12-11-3:7:1
请注意,有多个条目说它在 12-11 日轮换,但 catalina.out 自 12-8 日以来没有轮换,但它仍然没有轮换。
非常感谢任何帮助。谢谢。
从logrotate.status的输出中,很明显catalina.out没有被logrotate控制。
在文件 /etc/logrotate.conf 中,请检查行
include /etc/logrotate.d
如果此行不存在,请添加。
仅当此行存在时,才会考虑在 /etc/logrotate.d 中添加的配置。
鉴于此获得了很多意见,我会让大家知道我找到的解决方案。
我无法让 logrotate 在 catalina.out 上工作,很抱歉,如果这正是您要找的。
我能做的就是阻止 catalina.out 生成。为此,我在 apache-tomee-plus-7.0.4/bin 中创建了一个名为 setenv.sh 的文件,并将这一行放入其中
export CATALINA_OUT="/dev/null"
当 tomee 启动时,它在 catalina.sh
中看起来像这样
eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
-classpath "\"$CLASSPATH\"" \
-Djava.security.manager \
-Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
-Dcatalina.base="\"$CATALINA_BASE\"" \
-Dcatalina.home="\"$CATALINA_HOME\"" \
-Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
org.apache.catalina.startup.Bootstrap "$@" start \
>> "$CATALINA_OUT" 2>&1 "&"
所以输出到文件对于 运行 这本书在后台似乎是必要的。输出到 /dev/null 让它输出到某个地方,但它无处可去
这是一个老案例,我看到了,但我觉得我应该添加我的解决方案,因为它会轮换日志,这是最初的问题。
就我而言,我设置 /etc/logrotate.d/tomcat 文件的方式与 Justin 在最初问题中所做的大致相同:
/<apache-location>/tomcat/logs/catalina.out {
daily
copytruncate
rotate 180
compress
missingok
maxsize 200M
}
(我的 apache 位置很奇怪,所以请酌情替换。rotate 180
将我的日志保存大约 30 天,如果我的数学计算不太远的话(24 小时 * 30 天 = 720 小时 -->如果每 4 小时轮换一次,则产生 720 / 4 = 180 次 --> 保留 180 个日志文件)。)
但我从一个普通的 cronjob 触发执行,因此:
0 */4 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/tomcat >> /var/log/cut.log 2>&1
要每天轮换,只需将 cronjob 的第一部分调整为例如0 0 * * *
(每天午夜)。
-vf 选项用于打开详细(用于记录 cron)并强制执行轮换。 /var/log/cut.log 是我添加的专门用于记录 cron 作业的文件。 >> /var/log/cut.log 2>&1
当然可以去掉。
我是 运行 作为 root 用户的 rotation/cron 工作。
这似乎适用于我的系统,在最初遇到 很多 麻烦之后。不确定这是理想的解决方案,但至少我避免了catalina.out
长到天上,这是我的主要目标,我也怀疑原始问题的目标...
使用 Apache 的 rotatelogs
很容易。
只是设置环境 属性:
CATALINA_OUT_CMD="/usr/sbin/rotatelogs -f $CATALINA_BASE/logs/catalina.out.%Y-%m-%d.log 86400"
它将创建一个命名管道 catalina.out,因此无需重新启动即可旋转它 Tomcat。
有关详细信息,请参阅 catalina.sh 文件。
我正在尝试使用 logrotate 每天自动轮换出 tomcat 的 catalina.out,即使我可以手动调用 logrotate 并且它工作正常。我正在使用我已经尝试了所有解决方案,但我无法让它旋转。我在 Oracle Linux 7.5 上,它基本上是 RHEL 7。
以下是我采取的步骤:
我创建了一个文件 /etc/logrotate.d/tomee.conf,如下所示:
/apache-tomee-plus-7.0.4/logs/catalina.out
{
su opc opc
daily
rotate 7
compress
notifempty
missingok
copytruncate
}
我可以手动执行 logrotate,使用 sudo /usr/sbin/logrotate /etc/logrotate.conf
我也尝试使用 sudo /usr/sbin/logrotate -d /etc/logrotate.conf
进行调试并且输出没有错误
...
rotating pattern: /apache-tomee-plus-7.0.4/logs/catalina.out
after 1 days (7 rotations)
empty log files are not rotated, old logs are removed
switching euid to 1000 and egid to 1000
considering log /apache-tomee-plus-7.0.4/logs/catalina.out
log needs rotating
rotating log /apache-tomee-plus-7.0.4/logs/catalina.out, log->rotateCount is 7
dateext suffix '-20181211'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
copying /apache-tomee-plus-7.0.4/logs/catalina.out to /apache-tomee-plus-7.0.4/logs/catalina.out-20181211
truncating /apache-tomee-plus-7.0.4/logs/catalina.out
compressing log with: /bin/gzip
switching euid to 0 and egid to 0
...
但它仍然不会每天自动执行。
我也知道logrotate是运行,因为根据/var/lib/logrotate/logrotate.status
,其他日志都在轮转,但不是catalina.out
cat /var/lib/logrotate/logrotate.status
logrotate state -- version 2
"/var/log/yum.log" 2018-11-29-18:44:14
"/var/log/up2date" 2018-9-17-19:0:0
"/apache-tomee-plus-7.0.4/logs/catalina.out" 2018-12-8-0:37:14
"/var/log/chrony/*.log" 2018-9-17-19:0:0
"/var/log/wtmp" 2018-12-3-17:48:49
"/var/log/spooler" 2018-11-29-18:44:14
"/var/log/btmp" 2018-12-3-17:48:49
"/var/log/iscsiuio.log" 2018-9-17-19:0:0
"/var/log/maillog" 2018-12-11-3:7:1
"/var/log/secure" 2018-12-11-3:7:1
"/var/log/messages" 2018-12-11-3:7:1
"/var/account/pacct" 2018-9-17-19:0:0
"/var/log/cron" 2018-12-11-3:7:1
请注意,有多个条目说它在 12-11 日轮换,但 catalina.out 自 12-8 日以来没有轮换,但它仍然没有轮换。
非常感谢任何帮助。谢谢。
从logrotate.status的输出中,很明显catalina.out没有被logrotate控制。
在文件 /etc/logrotate.conf 中,请检查行
include /etc/logrotate.d
如果此行不存在,请添加。 仅当此行存在时,才会考虑在 /etc/logrotate.d 中添加的配置。
鉴于此获得了很多意见,我会让大家知道我找到的解决方案。
我无法让 logrotate 在 catalina.out 上工作,很抱歉,如果这正是您要找的。
我能做的就是阻止 catalina.out 生成。为此,我在 apache-tomee-plus-7.0.4/bin 中创建了一个名为 setenv.sh 的文件,并将这一行放入其中
export CATALINA_OUT="/dev/null"
当 tomee 启动时,它在 catalina.sh
中看起来像这样eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
-classpath "\"$CLASSPATH\"" \
-Djava.security.manager \
-Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
-Dcatalina.base="\"$CATALINA_BASE\"" \
-Dcatalina.home="\"$CATALINA_HOME\"" \
-Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
org.apache.catalina.startup.Bootstrap "$@" start \
>> "$CATALINA_OUT" 2>&1 "&"
所以输出到文件对于 运行 这本书在后台似乎是必要的。输出到 /dev/null 让它输出到某个地方,但它无处可去
这是一个老案例,我看到了,但我觉得我应该添加我的解决方案,因为它会轮换日志,这是最初的问题。
就我而言,我设置 /etc/logrotate.d/tomcat 文件的方式与 Justin 在最初问题中所做的大致相同:
/<apache-location>/tomcat/logs/catalina.out {
daily
copytruncate
rotate 180
compress
missingok
maxsize 200M
}
(我的 apache 位置很奇怪,所以请酌情替换。rotate 180
将我的日志保存大约 30 天,如果我的数学计算不太远的话(24 小时 * 30 天 = 720 小时 -->如果每 4 小时轮换一次,则产生 720 / 4 = 180 次 --> 保留 180 个日志文件)。)
但我从一个普通的 cronjob 触发执行,因此:
0 */4 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/tomcat >> /var/log/cut.log 2>&1
要每天轮换,只需将 cronjob 的第一部分调整为例如0 0 * * *
(每天午夜)。
-vf 选项用于打开详细(用于记录 cron)并强制执行轮换。 /var/log/cut.log 是我添加的专门用于记录 cron 作业的文件。 >> /var/log/cut.log 2>&1
当然可以去掉。
我是 运行 作为 root 用户的 rotation/cron 工作。
这似乎适用于我的系统,在最初遇到 很多 麻烦之后。不确定这是理想的解决方案,但至少我避免了catalina.out
长到天上,这是我的主要目标,我也怀疑原始问题的目标...
使用 Apache 的 rotatelogs
很容易。
只是设置环境 属性:
CATALINA_OUT_CMD="/usr/sbin/rotatelogs -f $CATALINA_BASE/logs/catalina.out.%Y-%m-%d.log 86400"
它将创建一个命名管道 catalina.out,因此无需重新启动即可旋转它 Tomcat。
有关详细信息,请参阅 catalina.sh 文件。