logrotate使用及权限不够(Permission denied)处理

背景

Linux系统下,Tomcat的catalina.out日志会随着时间的增长变的越来越大,最终会导致磁盘空间被占满,程序无法运行。目前的在我们测试服务器上,20天就会增大到30G。

说明

catalina.out文件内容:

tomcat的标准输出(stdout)和标准出错(stderr),这是在tomcat的启动脚本里指定的,如果没有修改的话stdout和stderr会重定向到这里。所以我们在应用里使用System.out打印的东西都会到这里来。一般不需要看,但一旦系统发生错误你的业务日志源如果没有捕百获到该异常就无法定位问题。

如果我们在应用里使用其他的日志框架,配置了向Console输出的,则也会在这里出现。比如以logback为例,如果配置ch.qos.logback.core.ConsoleAppender则会输出到catalina.out里。

注意点

catalina.out文件不能直接只用rm命令进行删除。因为catlina.out 是tomcat 的输出日志,只要运行就会有日志输出,所有不能直接删除,要去清空。即当进程打开了某个文件时,只要该进程保持打开该文件,即使将其删除,它依然存在于磁盘中。这意味着,进程并不知道文件已经被删除,它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入,导致即使删除了文件,文件还是会占用磁盘空间。

使用该命令清空文件

echo -n  " " > catalina.out

logrotate工具

注意点:使用root用户添加文件,且在配置文件中需要赋予root权限(su root root),否则不能执行,会出现如下图的错误。
在这里插入图片描述

使用

在/etc/logrotate.d/目录下新建一个名为tomcat的文件即可。

/usr/local/vcms/basic/tomcat/logs/catalina.out{
    su root root
    copytruncate
    daily
    rotate 7
    missingok
    compress
    size 16M
}
配置说明
/usr/local/vcms/basic/tomcat/logs/catalina.out{ # 要轮转的文件,对应的catalina.out文件
    su root root # 使用root权限
    copytruncate # 创建新的catalina.out副本后,截断源catalina.out文件
    daily     # 每天进行catalina.out文件的轮转
    rotate 7   # 至多保留7个副本
    missingok   # 如果要轮转的文件丢失了,继续轮转而不报错
    compress   # 使用压缩的方式(非常有用,节省硬盘空间;一个2~3GB的日志文件可以压缩成60MB左右)
    size 16M   # 当catalina.out文件大于16MB时,就轮转
}

工作原理

  1. 每天晚上crond守护进程会运行在/etc/cron.daily目录中的任务列表;
  2. 与logrotate相关的脚本也在/etc/cron.daily目录中。运行的方式为"/usr/bin/logrotate /etc/logrotate.conf";
  3. /etc/logrotate.conf文件include了/etc/logrotate.d/目录下的所有文件。还包括我们上面刚创建的tomcat文件;
  4. /etc/logrotate.d/tomcat文件会触发/usr/local/vcms/basic/tomcat/logs/catalina.out文件的轮转。

以上是程序自动完成的,不需要我们干预。当然了,我们也可以使用手工的方式进行logrotate程序。在命令行进行如下运行:

logrotate /etc/logrotate.conf

或者只轮转刚刚的tomcat配置文件,可以这样运行:

logrotate --force /etc/logrotate.d/tomcat

手动执行8次后,目录情况

会按序号,生成7个压缩文件,当多余7个时,会删除之前的压缩文件,确保不会占用过多的磁盘空间。

在这里插入图片描述

CentOS7下使用logrotate提示权限不够(Permission denied)

error: error opening /usr/local/vcms/basic/tomcat/logs/catalina.out: Permission denied
或者
error: stat of /home/hikvision/test.log failed: Permission denied
原因

CentOS默认开启selinux。通过下面方式查看,SELINUX=enforcing表示开启selinux。需要关闭,设置SELINUX=disabled,修改后需要reboot重启。其中hikOS默认是关闭selinux的。

$ cat /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#   enforcing - SELinux security policy is enforced.
#   permissive - SELinux prints warnings instead of enforcing.
#   disabled - SELinux is fully disabled.
SELINUX=enforcing
# SELINUXTYPE= type of policy in use. Possible values are:
#   targeted - Only targeted network daemons are protected.
#   strict - Full SELinux protection.
SELINUXTYPE=targeted
selinux简单说明
安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。SELinux 主要由美国国家安全局开发。
SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。

文件编码问题

使用notepad++,可查看到多余的字符。东西少可以直接手动编辑。

error: /etc/logrotate.d/tomcat:1 lines must begin with a keyword or a filename (possibly in double quotes)
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
logrotate 是一个用于管理日志文件的工具,它允许你自动轮转、压缩、删除和管理日志文件。通过 logrotate,你可以定期对日志文件进行轮转,以便保持文件的大小和数量在可控范围内。 使用 logrotate 的基本步骤如下: 1. 创建一个配置文件:在 `/etc/logrotate.d/` 目录下创建一个新的配置文件,命名为你要管理的日志文件。 例如,如果要管理 `/var/log/nginx/access.log`,可以创建一个名为 `nginx` 的配置文件:`/etc/logrotate.d/nginx`。 2. 编辑配置文件:在配置文件中指定日志文件的详细信息和轮转规则。 以下是一个简单的示例配置文件: ``` /var/log/nginx/access.log { rotate 7 # 保留最近的7个日志文件 daily # 每天执行一次轮转 missingok # 如果日志文件不存在,也不报错 compress # 压缩轮转后的日志文件 delaycompress # 在下一次轮转时才压缩 notifempty # 如果日志文件为空,不进行轮转 create 0644 # 创建新的轮转后日志文件的权限 sharedscripts # 在所有脚本执行前执行 postrotate 脚本 postrotate /usr/bin/systemctl reload nginx # 轮转后重新加载 Nginx endscript } ``` 3. 测试配置文件:使用 `logrotate` 命令进行配置文件的测试,检查是否有语法错误: ``` logrotate -d /etc/logrotate.d/nginx ``` 4. 执行轮转:使用 `logrotate` 命令执行轮转操作: ``` logrotate /etc/logrotate.d/nginx ``` 5. 自动化轮转:通常,你会将 logrotate 添加到计划任务中,以便定期自动执行轮转。这可以通过编辑 `/etc/crontab` 文件来完成。 添加类似以下的行来定义 logrotate 的执行频率: ``` 0 0 * * * root /usr/sbin/logrotate /etc/logrotate.conf ``` 以上是一个简单的 logrotate 配置和使用示例。你可以根据实际需求来自定义配置文件中的参数和轮转规则。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值