设置当前系统日志的大小限制

设置当前系统日志的大小限制

根据其他线程,设置当前syslog/var/log/syslog)的大小限制的唯一方法似乎是通过rsyslog,这有点棘手。我最终替换了下面的行/etc/rsyslog.d/50-default.conf

.*;auth,authpriv.none       -/var/log/syslog

使用以下两行:

$outchannel mysyslog,/var/log/syslog,1073741824,/home/username/.me/log_rotation_script
*.*;auth,authpriv.none          :omfile:$mysyslog

我的问题是,无论我输入什么,当我清除并重新启动log_rotation_script时,都会出现相同的错误。达到 1G 后,总是产生以下相同的错误:syslogrsyslog.servicesyslogrsyslog

Mar 01 22:17:27 # rsyslogd[341844]: program '/home/username/.me/log_rotation_script' (pid 341977) exited with status 1 [v8.2001.0]

Mar 01 22:17:27 # rsyslogd[341844]: file size limit cmd for file '/var/log/syslog' did no resolve situation  [v8.2001.0]

status 1即使我只echo在里面放一个命令它也会返回log_rotation_script

请注意,脚本或路径没有任何问题,因为如果我使用以下命令执行,则执行上述路径中的文件内容没有任何问题:

bash /home/username/.me/log_rotation_script

我这里遗漏了什么?请帮忙!

答案1

Rsyslog 开始运行但随后放弃权限并运行系统日志用户。检查配置指令$PrivDropToUser$PrivDropToGroup/etc/rsyslog.conf

$PrivDropToUser syslog
$PrivDropToGroup syslog

自从系统日志用户没有太多权限,它无法运行,logrotate因为logrotate需要访问其状态文件,而该文件不允许访问系统日志用户。同样,在我的例子中,我必须在日志轮换后重新启动 rsyslog,但同样,系统日志用户没有权限执行此操作。

我尝试了其他方法来克服这些限制(sudoers,附加权限),但每次解决一个问题,又会出现另一个问题,所以我认为logrotate这个$outchannel功能没用。

似乎它会对您输入的任何命令返回错误$outchannel,除了rmmv(这两个命令正在运行)。我试图truncate归档,但它失败了program '/usr/bin/truncate' (pid 1234) exited with status 1 [v8.2001.0],但是rm正在运行,您甚至不需要重新加载 rsyslog:

$outchannel syslog_file,/var/log/syslog,100000,/usr/bin/rm /var/log/syslog

*.*;auth,authpriv.none         :omfile:$syslog_file

答案2

可以通过为截断命令指定大小来截断日志,即$outchannel mysyslog,/var/log/syslog,1048576,/usr/bin/truncate -s 1M /var/log/syslog。否则,rm正如在奥历山大解决方案。

相关内容