由于手册页没有回答我的问题,而且我不想强制循环,所以我决定在这里提出这个问题。
logrotate 的手册页给出了以下示例:
"/var/log/httpd/access.log" /var/log/httpd/error.log {
rotate 5
mail www@my.org
size 100k
sharedscripts
postrotate
/usr/bin/killall -HUP httpd
endscript
}
Run Code Online (Sandbox Code Playgroud)
所有带有通配符的示例都只包含一个条目。现在,我感兴趣的是是否也允许这样做:
/var/log/httpd/*.log /var/log/httpd/*/*.log {
# ... same as above
}
Run Code Online (Sandbox Code Playgroud)
原因如下:我有多个虚拟主机,我将它们拆分为“拥有”这些虚拟主机的用户。由于日志文件是世界可读的,我想将一个文件夹绑定挂载到用户主目录中,但将其限制为用户“拥有”的日志文件,这是通过将日志分离到文件夹中最容易实现的(并绑定- 无论如何安装都需要该方案)。因此,我正在寻找一种解决方案来轮换该目录下的日志文件/var/log/httpd以及该目录的子目录下的所有日志文件 -无需按名称列出每个子目录。
一般来说,手册页不提供通配符规则是否可能有多个条目或仅用于完整路径的线索。我正在使用 Debian“Squeeze”附带的 logrotate 版本 3.7.8-6,但我认为这不一定特定于发行版或程序版本。
我有一个 Linux 程序,它可以将信息写入 stdout 和 stderr。
我有一个 shell 脚本,可以将该输出重定向到/var/log. (通过>>和2>&1。)
有没有办法让日志文件轮换?(最大大小,然后切换到不同的文件,只保留有限数量的文件)
我看过一些谈论该logrotate程序的答案,听起来不错,但它们似乎也专注于在内部生成日志文件并处理 HUP 信号的程序。有没有办法使用基本的输出重定向脚本来完成这项工作?
我正在使用带有单元文件的 systemd 运行节点应用程序。可以使用应用程序日志查看,journalctl -u example.com但日志在某些时候被删除,删除历史记录(我需要调试)。
如何使用 systemd 配置日志轮换,以便我的应用程序日志存储在等中example.com.log.1,example.com.log.2以便查询应用程序的历史记录?
这是我的单元文件:
ExecStart=/usr/bin/node keystone.js
#Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=example.com
User=user
Group=user
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud) 我们目前正在 ruby on rails 应用程序服务器上从 Ubuntu 12.04 LTS 升级到 14.04 LTS,并且注意到日志文件不再循环。
在两台机器上,我们都有一个/var/app-name/config/logrotate由 unix 用户拥有的文件,deployer其中包含一个有效的 logrotate 文件,如下所示:
/var/app-name/log/*.log {
daily
rotate 365
delaycompress
compress
dateext
dateformat -%Y%m%d
missingok
copytruncate
}
Run Code Online (Sandbox Code Playgroud)
然后将其符号链接到/etc/logrotate.d/目录中app-name
在我们的 Ubuntu 12.04 服务器上,我们有运行良好的 logrotate 3.7.8。它进入var/app-name/log/目录并轮换所有日志文件
但是在 Ubuntu 14.04 服务器上,我们有 logrotate 3.8.7,它不会为我们的应用程序旋转日志文件。
当我通过调试它时,sudo logrotate -d -f /etc/logrotate/.conf我得到以下输出:
Ignoring /etc/logrotate.d/app-name because the file owner is wrong (should be root).
Run Code Online (Sandbox Code Playgroud)
在代码中追踪这一点,似乎为 3.8.x 发布流添加了此更改:https : //github.com/demands/logrotate/commit/b8ce386a969c60e5c8ee78023c24a1ba0aab1526
如果我更改文件的所有权符号链接到/var/app-name/config/logrotate到root那么它再次开始工作。但是鉴于此文件是我的应用程序的一部分,并且由我们在此状态下使用的 …
logrotate 无法旋转我的日志。我检查了文件权限,它们很好。
我什至尝试将“su root root”放在配置文件中,但我仍然面临同样的问题。
请在下面找到相关详细信息:
logrotate.conf 文件:
/var/log/testlog {
compress
delaycompress
dateext
maxage 180
rotate 15
size 1024M
start 1
rotate 15
missingok
}
Run Code Online (Sandbox Code Playgroud)
调试日志:[使用“-d”选项]
rotating pattern: /var/log/testlog 1073741824 bytes (15 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/testlog
log needs rotating
rotating log /var/log/testlog, log->rotateCount is 15
dateext suffix '-20140708'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
compressing log with: /bin/gzip
renaming /var/log/testlog.15.gz to /var/log/testlog.16.gz (rotatecount 15, logstart 1, i 15),
renaming /var/log/testlog.14.gz to /var/log/testlog.15.gz (rotatecount …Run Code Online (Sandbox Code Playgroud) 我有一个自定义日志记录类,它为进程的每个实例创建一个日志,并为日志文件名添加一个唯一的 id,例如:
我也可以添加日期/时间戳,例如:
LogRotate 是否能够使用正则表达式,以便我可以按日期和/或进程 ID 归档我的日志文件?
这个页面http://wiki.ci.uchicago.edu/I2U2/WebalizerConfiguration 建议重命名 /etc/cron.daily/logrotate 所以它在 /etc/cron.daily/webalizer 之后 - webalizer 应该在 logrotate 开始之前完成。
真的吗 ?cron.daily 会在开始下一个作业之前等待作业完成吗?
我正在尝试配置logrotate为每天午夜轮换和删除日志文件,但以前从未使用过它。所以:(a) 我想确认我的配置是正确的,并且 (b) 我需要帮助在午夜自动执行它的日常执行。
我的软件在/abs/path/to/log/myapp-log.txt. 这是我想要发生的事情:
/abs/path/to/log/在任何时间点只有 1 个日志文件;所以每次轮换日志并创建一个新的日志文件时,删除旧的logrotate.conf:
/abs/path/to/log/myapp-log.txt {
daily
copytruncate
create 700 myUser myGroup
dateext
maxage 1
missingok
}
Run Code Online (Sandbox Code Playgroud)
我在这里不确定的一些事情:
daily是否指定 a maxageof 1?missingok做什么?如果日志文件不存在,则忽略系统警告?如果我不指定missingok并且日志文件不存在会发生什么?copytruncate如果我指定daily/ ,我什至需要maxage 1吗?这三个设置感觉有点多余,但不确定每一个扮演什么角色。其次,我如何确保每天午夜运行?克朗?我之所以这么问,是因为我读到了/etc/cron.daily/logrotate每天自动运行的某个地方,但不确定它是如何配置的。提前致谢。
我有几个文件,比如 map-0.jpg(最新)、map-1.jpg、map-2.jpg、...、map-9.jpg(最旧)。现在我的 cronjob 从互联网上下载了一张新图片,并将其保存为 map-0.jpg。但是,所有其他文件都应重新枚举(0 -> 1、1 -> 2 等)。就我而言,数字 9 可以丢弃。
是否有一个方便的 bash 命令可以像 logrotate 一样枚举我的文件?
感谢帮助!
为什么/usr/sbinDebian 上的 logrotate 的 bin 路径(至少是“wheezy”)知道我们实际上可以在没有 root 权限的情况下使用它?