好的,我的情况如下。我尝试使用 logrotate 每小时轮换特定用户的 VNC 日志。根据我运行该实用程序时收到的反馈,日志轮换已停止,但当我查看所涉及的目录时,实际上没有任何变化。
系统是 Ubuntu 18.02 LTS。我通过 SSH 远程进行所有管理。
在我运行我的工作之前,/home/guest/.vnc 目录如下所示:
localadmin@xfce-kiosk-production-working:/etc$ sudo ls -l /home/guest/.vnc
total 120
-rw------- 1 guest guest 8 Oct 13 05:33 passwd
-rw-rw-r-- 1 guest guest 112995 Feb 1 14:56 xfce-kiosk-production-working:1.log
-rwxr-xr-x 1 guest guest 274 Oct 13 05:39 xstartup
我像这样调用我的脚本cron.hourly
:
sudo /etc/cron.hourly/logrotate
bash: guest: No such file or directory
reading config file /etc/logrotate.hourly.conf
Reading state from file: /var/lib/logrotate/status
Allocating hash table for state file, size 64 entries
Creating new state
["Creating new state" x28 deleted]
Handling 1 logs
rotating pattern: /home/guest/.vnc/xfce-kiosk-production-working:1.log 102400 bytes (4 rotations)
empty log files are rotated, old logs are removed
considering log /home/guest/.vnc/xfce-kiosk-production-working:1.log
Creating new state
Now: 2021-02-01 14:58
Last rotated at 2021-02-01 14:00
log needs rotating
rotating log /home/guest/.vnc/xfce-kiosk-production-working:1.log, log->rotateCount is 4
dateext suffix '-20210201'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
renaming /home/guest/.vnc/xfce-kiosk-production-working:1.log to /home/guest/.vnc/xfce-kiosk-production-working:1.log-20210201
creating new /home/guest/.vnc/xfce-kiosk-production-working:1.log mode = 0664 uid = 1001 gid = 1001
但当我回到目录时:
localadmin@xfce-kiosk-production-working:/etc$ sudo ls -l /home/guest/.vnc
total 120
-rw------- 1 guest guest 8 Oct 13 05:33 passwd
-rw-rw-r-- 1 guest guest 112995 Feb 1 14:56 xfce-kiosk-production-working:1.log
-rwxr-xr-x 1 guest guest 274 Oct 13 05:39 xstartup
我的/etc/cron.hourly/logrotate
脚本:
#!/bin/sh
su guest guest
/usr/sbin/logrotate -d /etc/logrotate.hourly.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT hourly job exited abnormally with [$EXITVALUE]"
fi
exit 0
和我的/etc/logrotate/hourly.conf
文件:
/home/guest/.vnc/xfce-kiosk-production-working:1.log {
size 100k
create 664 guest guest
rotate 4
missingok
dateext
}
提前致谢。我是 logrotate 的新手,所以我仍在尝试理解这里的事情。
编辑
我发现问题是一个权限问题 -su guest guest
脚本中的命令正在启动一个新的 shell,不会导致脚本的其余部分以访客身份执行,并且默认logrotate
用户没有权限访问相关日志。
我最终删除了该/etc/cron.hourly/logrotate
脚本并将以下内容放入/etc/crontab
:
0 * * * * root logrotate -f /etc/logrotate/hourly.conf
这会导致 logrotate 作业每小时执行一次,并且由于它以 root 身份运行,因此不存在权限问题。
感谢所有与我联系并提出建议的人!
答案1
杰夫,
我认为你应该su guest guest
从脚本中删除它。我怀疑这是根本原因,但它可以有所帮助,因为:
- 无论如何,这个作业应该由 root 运行(您可以看到它按预期创建了新文件:
uid = 1001 gid = 1001
- 我猜是guest
) - su 带有 2 个参数将会出错(我们可以看到
bash: guest: No such file or directory
) - 如果 su 成功,它将停止脚本,直到 su 命令完成,这不是有意的(这
sudo -u guest
是一个技巧,但我认为你在这里不需要它)
除此之外,我没有发现任何问题,而且奇怪的是脚本运行后没有任何变化,即使我们可以看到旋转器正在做什么(或试图做什么)。