Logrotateを使用して手動でlogrotateを呼び出すことができますが、正常に機能しますが、logrotateを使用してTomcatのcatalina.outを毎日自動的にローテーションさせようとしています。私はそこにあるすべてのソリューションを試しましたが、回転させることができません。私は基本的にRHEL 7であるOracle Linux 7.5を使用しています。
これが私が取ったステップです:
次のようなファイル/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
...
ただし、それでも毎日自動的に実行されるわけではありません。
/var/lib/logrotate/logrotate.status
によると、他のログはローテーションされているが、catalina.outではないため、logrotateが実行されていることも知っています。
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を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 "&"
したがって、このtomeeをバックグラウンドで実行するには、ファイルに出力する必要があるようです。/dev/nullに出力すると、どこかに出力できますが、どこにも出力されません
これは古いケースですが、元の質問であるログをローテーションするため、ソリューションを追加する必要があると感じました。
私の場合、最初の質問でジャスティンが行ったのとほぼ同じ方法で/etc/logrotate.d/Tomcatファイルを設定しました。
/<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
毎日ローテーションするには、cronジョブの最初の部分を調整してください。 0 0 * * *
(毎日真夜中)。
-vfオプションは、詳細をオンにし(cronのログを記録するため)、ローテーションを強制的に実行します。 /var/log/cut.logは、cronジョブのロギング用に特別に追加したファイルです。 >> /var/log/cut.log 2>&1
もちろん削除できます。
Rootユーザーとしてrotation/cronジョブを実行しています。
最初はlotの問題が発生した後、これは私のシステムで機能するようです。これがidealソリューションであるかどうかはわかりませんが、少なくとも私はcatalina.out
は、私の主な目標である天空以上に成長し、元の質問の目標も疑っています...
Logrotate.statusの出力から、catalina.outがlogrotateによって制御されていないことは明らかです。
/ etc/logrotate.confファイルで、次の行を確認してください
include /etc/logrotate.d
この行が存在しない場合は追加してください。この行が存在する場合のみ、/ etc/logrotate.d内に追加された構成が考慮されます。