我怎样才能做logrotate?当我执行 logrotate 时,我看不到任何效果:
root@me-Latitude-E5550:/etc/logrotate.d# cd ..
root@me-Latitude-E5550:/etc# cd ..
root@me-Latitude-E5550:/# logrotate -d /etc/logrotate.conf
Ignoring /etc/logrotate.conf because of bad file mode.
Handling 0 logs
root@me-Latitude-E5550:/# chmod 644 /etc/logrotate.d/*
root@me-Latitude-E5550:/# cd /etc/logrotate.d
root@me-Latitude-E5550:/etc/logrotate.d# ls
apport custom pm-utils speech-dispatcher upstart
apt dpkg ppp ufw
cups-daemon lightdm rsyslog unattended-upgrades
root@me-Latitude-E5550:/etc/logrotate.d# cd ..
root@me-Latitude-E5550:/etc# cd ..
root@me-Latitude-E5550:/# logrotate -d /etc/logrotate.conf
Ignoring /etc/logrotate.conf because of bad file mode.
Handling 0 logs
root@me-Latitude-E5550:/# cd /var/log
root@me-Latitude-E5550:/var/log# ls -larth
total 34M
drwxrwxrwx 2 root root 4,0K Feb 18 …Run Code Online (Sandbox Code Playgroud) 为什么 selinux 策略适用于从 cronjobs 运行的命令(例如:logrotate),而不适用于直接从命令行运行的命令?
当我从命令行手动运行 logrotate 时,它运行良好。但是当它从 cronjob 运行时,我在 audit.log 中收到一个错误,提醒我 selinux 阻止了对 www 的访问等。
这是为什么?以及如何模拟它从 cronjob 运行以进行测试?
安装新的 CentOS 6.0 服务器后,logrotate 工作得非常好。然后有一天,由于内核崩溃,服务器不得不硬启动,从那时起,日志轮换不会轮换日志。
所以我做了一个单独的 cron 条目来手动和强制轮换日志并将输出重定向到一个日志文件,并为每个文件获取以下行:
rotating pattern: /home/mail3/log/popMailProcessing.log forced from command line (60 rotations)
empty log files are rotated, old logs are removed
considering log /home/mail3/log/popMailProcessing.log
error: stat of /home/mail3/log/popMailProcessing.log failed: Permission denied
Run Code Online (Sandbox Code Playgroud)
但是,如果我从命令行手动执行 logrotation,它可以完美运行。我在命令行上使用的命令是:
logrotate -v -f /etc/logrotate.d/mail3-logs
Run Code Online (Sandbox Code Playgroud)
我的 logrotate.conf 文件是:
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date …Run Code Online (Sandbox Code Playgroud) 我最近尝试将我的 Nvidia 驱动程序替换为我的 Nvidia 卡的 Nouveau 驱动程序,(请参阅从 Nvidia 专有驱动程序切换到 Debian wheezy 上的 Nvidia 卡的 Nouveau 驱动程序)。
不幸的是,这次尝试失败并被烧毁,所以我中止了它。然而,在我重新启动到我的习惯配置并且烟雾消散之后,我发现了一些我已经知道的事情,即 Debian 只保留一份 X 服务器日志的副本,即/var/log/Xorg.0.log. 因此,我转向 Nouveau 的不幸尝试的日志已经丢失。
所以,我的问题是,如何更改 Debian 的配置以保留 X 日志文件的旧副本?:
我认为这种逻辑是由 logrotate 处理的,但是我可以看到/etc/logrotate.conf
,/etc/logrotate.d/对此没有任何具体的逻辑。只是在那里添加一些东西吗?如果是这样,我想知道为什么它已经不在了。
我有一个应用程序,它每小时轮换自己的日志文件。每小时我都想删除所有超过n几天的文件。logrotate由于商业政策,我必须使用此方法。
那么logrotate每小时运行这个命令相当于什么呢?
find /var/log/app -name "*.old" -mtime +1 -exec rm -f {} \;
Run Code Online (Sandbox Code Playgroud) 每天我都在删除文件夹中的日志文件。
find ~/folder -mtime +28 -type f -delete
Run Code Online (Sandbox Code Playgroud)
现在我想存档和压缩受上述删除命令影响的所有文件,并将此 tar.gz 存储在新目录 folder2 中。
所以让我们假设:
~/folder:
- x1 (3 days old)
- x2 (3 days old)
- y1 (29 days old)
- y2 (29 days old)
~/folder2:
- genericname1.tar.gz: (some already present archive)
- ...
Run Code Online (Sandbox Code Playgroud)
归档、压缩和删除
~/folder:
- x1
- x2
~/folder2:
- genericname1.tar.gz:
- ...
- genericname2.tar.gz:
- y1
- y2
Run Code Online (Sandbox Code Playgroud) 我正在使用logrotatewith轮换日志文件copytruncate,我需要运行一个以新文件名作为参数的脚本。我知道我可以使用$1inside postrotate,但这给了我旋转文件的名称 - 而不是带有日期扩展名的文件。
所以基本上我有:
/var/log/myapp/server.log
当我运行这个 logrotate 配置时:
/var/log/myapp/server.log {
copytruncate
rotate 1008
dateext
dateformat -%s
create 660 syslog syslog
postrotate
python3 /opt/myapp/test.py $1 > /dev/null
endscript
}
Run Code Online (Sandbox Code Playgroud)
我得到
/var/log/myapp/server.log <-- (now empty)
/var/log/myapp/server.log-1536844088
Run Code Online (Sandbox Code Playgroud)
我可以以/var/log/myapp/server.log-1536844088某种方式在 postrotate上运行脚本吗?
我真的很难理解logrotate在我自己的 shell 文件中运行命令时是如何工作的,以及它是如何工作的。
有问题的命令是:
rclone -L -vv --log-file "/home/mike/tmp/qqq.log" sync "/media/mike/W10 D drive/My Documents/" remote:MyDocuments_M17A_from_Linux
Run Code Online (Sandbox Code Playgroud)
我想要什么:
我希望经常检查这个 qqq.log 文件,比如每 10 分钟一次,看看它是否超过了给定的大小,比如 1 MB。如果有,旋转文件。rclone使用该-vv选项会故意产生大量输出(即尝试理解让 logrotate 为这个用例工作)。
有一个适度有用的教程在这里,但它仍然让我在黑暗中:
您打算如何配置来自您自己的非系统进程的日志轮换?你的意思是在底部贴线/etc/logrotate.conf吗?这就是我所做的(在“#system-specific logs may be configured here”下):
/home/mike/tmp/qqq.log {
notifempty
size 1M
daily
create 0664 root root
rotate 3
}
Run Code Online (Sandbox Code Playgroud)
后来:我现在意识到您也可以放入单个文件/etc/logrotate.d- 没有太大的复杂性。
是不是默认情况下logrotate每天只运行一次,凭借文件/etc/cron.daily/logrotate?
这是否意味着如果我想要更频繁的检查,我可能应该设置一个cron作业来执行此操作,每 10 分钟运行一次(在本例中)?
你打算以logrotate <config file>root身份运行吗?我问这个问题是因为我以 root 和用户身份都尝试过。用户似乎没有工作。
指向此类设置的初学者指南的链接(这很常见)会有所帮助。我已经搜索过,但我发现的大部分内容都没有为您提供分步指南。
在当前的 Debian 测试机器上,我想使用 xz 而不是 GZip 来压缩日志文件。它具有较高的开箱即用压缩率,因此我希望使用它。
但是,每当我在 logrotate 配置中指定它时,logrotate 就会说它无法用于xz压缩。它只是说该文件无法执行,即使它在系统和用户 shell 中的其他任何地方都可以工作。
有什么办法可以调试这个吗?
我们有一个使用 syslog 进行日志记录的自定义应用程序,现在我们面临 logrotate 的问题,日志正在写入 urls.log.1 而不是 urls.log ,logrotate 在旋转后不会创建 url.log。我们正在使用Ubuntu 14.04 LTS 服务器。我们如何强制 logrotate 在旋转后创建 urls.log ?
logrotate 配置(/etc/logrotate.d/rsyslog)
/usr/local/app/log/urls.log
{
rotate 10
daily
missingok
notifempty
compress
delaycompress
sharedscripts
su app app
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
}
Run Code Online (Sandbox Code Playgroud)
如果我手动 mv urls.log.1 到 urls.log 并运行 force logrotate ,这将是输出
considering log /usr/local/app/log/urls.log
log needs rotating
rotating log /usr/local/app/log/urls.log, log->rotateCount is 10
dateext suffix '-20170228'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
compressing log with: /bin/gzip
switching uid to 1000 and gid to …Run Code Online (Sandbox Code Playgroud)