来自 logrotate 联机帮助页。
它不会在一天内多次修改日志,除非该日志的标准基于日志的大小
根据手册页,如果配置基于日志大小,则 logrotate 应该旋转文件。但是,即使文件大小大于 100k,我的文件也无法获取。
有人可以指出是什么问题。
我的配置
/home/jetech/work/lampstack-5.3.9-0/apache2/logs/access_log {
copytruncate
compress
# dateext
rotate 365
size 100k
olddir /home/jetech/work/lampstack-5.3.9-0/apache2/old_logs
notifempty
nomail
missingok
}
Run Code Online (Sandbox Code Playgroud) 我正在使用rotatelogs 以格式创建我的每日apache 日志host.<day>.<month>.<year>.access.log。现在我想在完成后 gzip 并将日志移动到不同的目录。怎么做?
更新:有一个小错误。logrotate->rotatelogs
我的日志文件的格式为“2011-03-28.log.php”。每天都会创建日志文件。我想保留 5 天的日志和休息我想删除它,这意味着只会保留 5 个日志文件,其余的所有内容都将被删除。
是否可以使用 Linux logrotate ?
我们正在使用 MongoDB 副本集来共享 Web 场中的会话和其他(可能敏感的)数据。
我们存储的所有数据都使用 TTL 索引在相对较短的时间段(例如一小时)后使文档过期,部分原因是出于安全原因。
但是,我突然想到,即使从 MongoDB 集合中删除数据,用于复制的 oplog 仍将包含所有创建(然后删除)的文档;然后可以轻松地从 oplog 中读取所有过期的数据。
根据分配给 oplog 的大小,其中的数据可能很旧。
我的问题是,这里的最佳实践是什么?除了大幅减少 oplog 的大小,我们还能做些什么来防止旧数据被访问?
我在“logrotate.d”目录中添加了两个脚本,以便轮换我的应用程序日志。这是其中之一的配置:
<myLogFilePath> {
compress
copytruncate
delaycompress
dateext
missingok
notifempty
daily
rotate 30
}
Run Code Online (Sandbox Code Playgroud)
“cron.daily”目录中有一个“logrotate”脚本(根据cron日志,它似乎每天都在运行):
#!/bin/sh
echo "logrotate_test" >>/tmp/logrotate_test
#/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
/usr/sbin/logrotate -v /etc/logrotate.conf &>>/root/logrotate_error
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
Run Code Online (Sandbox Code Playgroud)
第一个 echo 语句正在运行。
但是我发现我的应用程序日志本身没有轮换,而其他日志(如 httpd)正在轮换 **
**而且我也没有在提到的“logrotate_error”文件中看到任何输出(对所有用户都有写权限)。
但是系统日志显示:“logrotate:ALERT 异常退出 [1]”
但是当我手动在“cron.daily”脚本中运行相同的“logrotate”时,一切似乎都正常。
为什么它在每日 cron 计划中不轮换?我在这里做错了吗?
如果我能得到这些急需的帮助,那就太好了。
更新: 看起来,这是因为 selinux - 我的用户主目录中的日志文件受到 selinux 的限制,并且运行 logrotate 脚本时:
SELinux is preventing /usr/sbin/logrotate from getattr access on the …Run Code Online (Sandbox Code Playgroud) 我想知道有没有一个程序可以做我想做的事。这就像一个流式日志轮换程序。对于 linux/unix 命令行。
假设我有一些输入正在传输一些数据。我想把它写一个文件,但是每天(或小时或其他)一个不同的文件,即打开一个具有指定日期时间模式的文件,并将 stdin 的内容写入该文件。当一天更改(或小时或分钟,或星期等)时,关闭该文件,然后重新打开一个新文件(将有一个新文件名),然后将行写入该文件?
所以像:
my long | process | that's generating | input | datestampfilewriter --daily 'output.%Y-%m-%d.txt'
Run Code Online (Sandbox Code Playgroud)
这个工具存在吗?
我们的开发机器有多个用户,他们的各种站点都存储在/home/username/apache. 在这些文件夹中是子文件夹,例如conf包含虚拟主机配置、logs包含日志、public包含实际 Web 文件等。
我想更改日志,而不是单个日志文件:
CustomLog "/home/user/apache/domain.tld/logs/web.log" combined
Run Code Online (Sandbox Code Playgroud)
我们将日志分成每日日志:
CustomLog "|/usr/sbin/rotatelogs -l /home/user/apache/domain.tld/logs/%Y%m%d_web.log 86400" combined
Run Code Online (Sandbox Code Playgroud)
但是,当我放入此配置时,重新启动 apache,然后重新加载页面,同时拖尾audit.log到ausearch,我看到如下错误:
----
type=SYSCALL msg=audit(06/06/2014 14:16:51.401:406272) : arch=x86_64 syscall=open success=no exit=-13(Permission denied) a0=7fff70a92460 a1=80441 a2=1b6 a3=7fff70a92110 items=0 ppid=64542 pid=64617 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=(none) ses=1193 comm=rotatelogs exe=/usr/sbin/rotatelogs subj=unconfined_u:system_r:httpd_rotatelogs_t:s0 key=(null)
type=AVC msg=audit(06/06/2014 14:16:51.401:406272) : avc: denied { search } for pid=64617 comm=rotatelogs name=home dev=md2 ino=7208961 scontext=unconfined_u:system_r:httpd_rotatelogs_t:s0 tcontext=system_u:object_r:home_root_t:s0 tclass=dir
Run Code Online (Sandbox Code Playgroud)
我以为我可以通过更改类型来解决这个问题,就像我已经修复了其他 …
auditd 可以使用日期而不是整数来命名其轮换的审计日志吗?现在我有
audit.log
audit.log.1
audit.log.2
...
Run Code Online (Sandbox Code Playgroud)
当audit.log填满所有的文件都是旋转一个数字更高。我有一个备份审计日志的脚本,tar当它看到所有文件在它下面移动时会感到困惑。我想按日期命名文件,这样它们在audit.log填满时就不会全部移动。
我有一个 8GB 的文件,调用php.log了一个正在运行的 php 脚本登录到它。记录每个事件对我来说很重要,我想压缩它并清空当前文件而不停止 Web 服务器。
如果我运行:
mv php.log php.log.backup20140305-01
touch php.log
Run Code Online (Sandbox Code Playgroud)
我会丢失一些数据。如何在不丢失任何数据的情况下执行此操作?
我正在尝试利用newsyslog.conf -- newsyslog(8) configuration file来轮换我的apache//日志文件nginx:squid
# uname -a
FreeBSD X 9.2-RELEASE-p17 FreeBSD 9.2-RELEASE-p17 #0 r282430: Mon May 4 13:59:58 PDT 2015 root@X:/usr/obj/usr/src/sys/R610 amd64
# tail -1 /etc/newsyslog.conf
<include> /etc/newsyslog-local.conf
# cat /etc/newsyslog-local.conf
/var/log/httpd-*.log root:wheel 644 7 * @T00 JC /var/run/httpd.pid
/var/log/nginx-*.log root:wheel 644 7 * @T00 JC /var/run/nginx.pid
/var/log/squid/*.log squid:squid 640 7 * @T00 JC /var/run/squid/squid.pid
# newsyslog
# echo $?
0
# ll /var/log/httpd-* /var/log/nginx-* /var/log/squid/*log*
-rw-r--r-- 1 root wheel 794179378 Jun …Run Code Online (Sandbox Code Playgroud) 好吧,有时看似简单的事情会变成灾难。
一旦我添加到 VirtualHost:
CustomLog "|usr/sbin/rotatelogs -l ${APACHE_LOG_DIR}/01030/%Y%W_01030.access.log 604800" combined
Run Code Online (Sandbox Code Playgroud)
我得到:
[Wed Nov 25 20:08:37.886766 2015] [mpm_prefork:notice] [pid 1381] AH00171: Graceful restart requests, do restart (2)No such file or directory: AH00104: 无法启动管道日志程序 'usr/sbin/ rotatelogs -l /var/log/apache2/40539/%Y%W_40539.access.log 604800'
[2015 年 11 月 25 日星期三 20:08:37.992571] [:emerg] [pid 1381] AH00019:无法打开日志,正在退出
Debian 8,Apache 2.4.10。
一定有什么东西在水里。在 2.4.10 周围看到了这个问题,但显然没有令人满意的答案。帮助将不胜感激。
log-rotation ×11
logging ×3
apache-2.2 ×2
gzip ×2
logrotate ×2
apache-2.4 ×1
auditd ×1
cron ×1
cron.daily ×1
dump ×1
freebsd ×1
mongodb ×1
pipe ×1
security ×1
selinux ×1
ubuntu ×1
unix ×1