1,处理Tomcat日志文件catalina.out过大问题
a,利用Linux自带的logrotate程序来处理catalina.out的文件过大
(1)编辑logrotate.conf文件,打开compress选项(去掉注释)
[root@localhost ~]# cat /etc/logrotate.conf | grep -v “^$”| grep -v “#”
weekly
rotate 4
create
dateext
compress <<这一项,去掉注释
(2)添加指定文件,在/etc/logrotate.d/目录下新建一个名为tomcat的文件
[root@localhost ~]# cat > /etc/logrotate.d/tomcat <<EOF
方案1:
/home/tomcat/logs/catalina.out{ #要轮转的文件
copytruncate # 创建新的catalina.out副本后,截断源catalina.out文件
notifempty # 如果是空文件的话,不转储
daily # 每天进行catalina.out文件的轮转
rotate 20 # 至多保留20个副本
missingok # 如果要轮转的文件丢失了,继续轮转而不报错
compress # 使用压缩的方式(节省硬盘空间;一个2~3GB的日志文件可以压缩成60MB左右)
size 100M # 当catalina.out文件大于100MB时,就轮转
}
方案:2
/home/tomcat/logs/catalina.out{ #要轮转的文件
copytruncate # 创建新的catalina.out副本后,截断源catalina.out文件
notifempty # 如果是空文件的话,不转储
daily # 每天进行catalina.out文件的轮转
rotate 20 # 至多保留20个副本
missingok # 如果要轮转的文件丢失了,继续轮转而不报错
compress # 使用压缩的方式(节省硬盘空间;一个2~3GB的日志文件可以压缩成60MB左右)
size 100M # 当catalina.out文件大于100MB时,就轮转
sharedscripts # 执行脚本
postrotate # 脚本开始
# 把操作当前的日志文件的进程停止并清空(注意:这里的进程是指日志文件的进程,不是应用程序的进程,这两者要区分起来)
# 如果不停止操作当前的日志文件的进程,压缩文件后,原文件的存储空间会一样不变,内容会减少,出现/0或其他乱码代替了存 储空间,达不到压缩的效果。
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript #脚本结束
}
参数说明:
compress #通过gzip 压缩转储旧的日志
nocompress #不需要压缩时,用这个参数
copytruncate #用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate #备份日志文件但是不截断
create mode owner group #使用指定的文件模式创建新的日志文件
nocreate #不建立新的日志文件
delaycompress #和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress #覆盖 delaycompress 选项,转储同时压缩。
errors address #专储时的错误信息发送到指定的Email 地址
ifempty #即使是空文件也转储,这个是 logrotate 的缺省选项。
notifempty #如果是空文件的话,不转储
mail address #把转储的日志文件发送到指定的E-mail 地址
nomail #转储时不发送日志文件
olddir directory #转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir #转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript #在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript #在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
sharedscripts #所有的日志文件都轮转完毕后统一执行一次脚本
daily #指定转储周期为每天
weekly #指定转储周期为每周
monthly #指定转储周期为每月
rotate count #指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
size size #当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB
(3)执行方式
a,系统自动执行
每天晚上crond守护进程会运行在/etc/cron.daily目录中的任务列表与logrotate相关的脚本也在/etc/cron.daily目录中。
运行的方式为"/usr/bin/logrotate /etc/logrotate.conf";
/etc/logrotate.conf文件include了/etc/logrotate.d/目录下的所有文件。还包括我们上面刚创建的tomcat文件;
/etc/logrotate.d/tomcat文件会触发/home/tomcat/utr/logs/catalina.out文件的轮转。
b,手动执行:
[root@localhost ~]# logrotate /etc/logrotate.conf
c,只轮转刚刚的tomcat配置文件:logrotate --force /etc/logrotate.d/tomcat
[root@localhost ~]# logrotate --force /etc/logrotate.d/tomcat
2,Tomcat使用域名(80端口)访问配置
[root@localhost ~]# vi /home/tools/apache-tomcat-8.5.42/conf/server.xml
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
<!--<Context path="" docBase="esqsui" debug="0" reloadable="false" crossContext="true"/>-->
<Context path="" docBase="esqsui" debug="0" reloadable="false" crossContext="true"/>
</Host>
</Engine>
</Service>
</Server>
3,处理Java项目日志文件nohup.out过大问题
(1)添加指定文件,在/etc/logrotate.d/目录下新建一个名为java_logloop的文件
[root@localhost ~]# cat > /etc/logrotate.d/java_logloop<<EOF
/home/esqabc/esqabc_jar/nohup.out{ #要轮转的文件
copytruncate # 创建新的nohup.out副本后,截断源nohup.out文件
notifempty # 如果是空文件的话,不转储
daily # 每天进行nohup.out文件的轮转
rotate 20 # 至多保留20个副本
missingok # 如果要轮转的文件丢失了,继续轮转而不报错
compress # 使用压缩的方式(节省硬盘空间;一个2~3GB的日志文件可以压缩成60MB左右)
size 100M # 当nohup.out文件大于100MB时,就轮转
}
(2)Java项目启动命令
a,错误的启动命令
[root@localhost ~]# nohup java -jar esqbac-jar-1.0.0.jar > nohup.out 2>&1 &
说明:启动命令中 esqbac-jar-1.0.0.jar > nohup.out & 重定向输出用的是 >
这种情况如果服务不停止,文件占用的磁盘空间不会被释放
b,正确的启动命令
[root@localhost ~]# nohup java -jar esqbac-jar-1.0.0.jar >> nohup.out 2>&1 &
说明: 把 > 替换成 >> 追加的形式,就可以被logrotate正常切割
c,可以使用(ll -h)和(du -sh )来查看实际的存储大小
[root@localhost ~]# ll -h
[root@localhost ~]# du -sh