我正在使用模板动态生成 rsyslog 文件名。我对原始格式做了一些更改,但重新启动后 rsyslog 似乎仍然在使用新模板和旧模板。
我的文件名模板如下:
$template RemoteDailyLog,"/var/log/remote/%hostname%/%$year%/%$month%/%$day%.log"
对此:
$template RemoteDailyLog,"/var/log/remote/%hostname%/%fromhost-ip%/%$year%/%$month%/%$day%.log"
我使用 停止了 rsyslogd service rsyslog stop
,使用 删除了所有日志文件rm -rf /var/log/remote/*
,然后使用 重新启动了 rsyslogd service rsyslog start
。
问题是 rsyslog 似乎正在构建该类型的文件夹结构"/var/log/remote/%hostname%/%$year%/%$month%/%$day%.log"
(即没有远程 IP),而该文件夹结构不再出现在我的配置中的任何地方。
是否有可能旧日志或配置数据已被缓存在某处,并在服务器重启后得以保留?这让我有点害怕。
答案1
修复后该问题自行解决相关问题我在使用 rsyslog 时遇到了这个问题。我不确定这有什么关系,但如果 rsyslog 在打开动态日志文件时遇到问题,那么它似乎在过去的配置方面存在一些不稳定的行为。无论如何,以下是我的解决方案的重印:
检查服务器的 /var/log/syslog 后,我发现 rsyslog 在打开动态文件时遇到了问题。事实证明,Ubuntu 10.04 LTS 中 rsyslog 的默认配置不适合动态(基于模板)日志文件。Richard Fleming 建议的补丁如下:
--- /etc/rsyslog.conf.orig 2009-11-17 11:21:10.874573462 -0500
+++ /etc/rsyslog.conf 2009-11-17 12:45:15.604573200 -0500
@@ -42,9 +42,11 @@
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
+$DirOwner syslog
+$DirGroup adm
$Umask 0022
$PrivDropToUser syslog
-$PrivDropToGroup syslog
+$PrivDropToGroup adm
#
# Include all config files in /etc/rsyslog.d/
有关详细信息,请参阅:For more information, see:https://bugs.launchpad.net/ubuntu/+source/rsyslog/+bug/484336
答案2
我遇到了同样奇怪的问题,我的解决方案更简单(线程归结为权限问题)......因为状态文件不包含任何敏感信息:
chmod 777 /var/lib/rsyslog
然后重新启动 rsyslog 几次。
免责声明:我知道把所有东西都放在一个目录中不是一个好习惯,而且这种解决方法有点愚蠢,但在这种情况下,由于 rsyslog 错误的原因不明,我不得不破例,因为该文件夹专门用于存放状态文件对于 rsyslog。请注意,我尝试了其他chown
设置来向 rsyslog 有效用户授予权限,但没有成功,因此采用这种愚蠢的解决方法。