behaviour in debug mode doesn't match real behaviour
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
logrotate (Ubuntu) |
Confirmed
|
High
|
Unassigned |
Bug Description
Situation: a single log file (no earlier rotates) and a logrotate status that says it is time to rotate.
# ls -l /var/log/mail.log*
-rw-r----- 1 syslog adm 287 May 16 11:27 /var/log/mail.log
# cat /var/lib/
logrotate state -- version 2
"/var/log/mail.log" 2012-3-31
# cat /tmp/test.conf
/var/log/mail.log
{
rotate 4
weekly
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
}
logrotate in debug mode will fail, because it simulates removing a non-existing mail.log.5.gz:
# logrotate -d /tmp/test.conf; echo $?
reading config file /tmp/test.conf
reading config info for /var/log/mail.log
Handling 1 logs
rotating pattern: /var/log/mail.log
weekly (4 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/mail.log
log needs rotating
rotating log /var/log/mail.log, log->rotateCount is 4
dateext suffix '-20140516'
glob pattern '-[0-9]
previous log /var/log/mail.log.1 does not exist
renaming /var/log/
renaming /var/log/
renaming /var/log/
renaming /var/log/
renaming /var/log/
renaming /var/log/mail.log to /var/log/mail.log.1
running postrotate script
running script (multiple) with arg /var/log/mail.log
: "
reload rsyslog >/dev/null 2>&1 || true
"
removing old log /var/log/
error: error opening /var/log/
1
logrotate's real behaviour handles this situation correctly:
# logrotate -v /tmp/test.conf; echo $?
reading config file /tmp/test.conf
reading config info for /var/log/mail.log
Handling 1 logs
rotating pattern: /var/log/mail.log
weekly (4 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/mail.log
log needs rotating
rotating log /var/log/mail.log, log->rotateCount is 4
dateext suffix '-20140516'
glob pattern '-[0-9]
previous log /var/log/mail.log.1 does not exist
renaming /var/log/
old log /var/log/
renaming /var/log/
old log /var/log/
renaming /var/log/
old log /var/log/
renaming /var/log/
old log /var/log/
renaming /var/log/
old log /var/log/
log /var/log/
renaming /var/log/mail.log to /var/log/mail.log.1
running postrotate script
0
Summary:
# logrotate -d /tmp/test.conf; echo $?
[..]
removing old log /var/log/
error: error opening /var/log/
exitcode: 1
# logrotate -v /tmp/test.conf; echo $?
[..]
log /var/log/
exitcode: 0
1) The release of Ubuntu you are using, via 'lsb_release -rd' or System -> About Ubuntu
Description: Ubuntu 12.04.3 LTS
Release: 12.04
2) The version of the package you are using, via 'apt-cache policy pkgname' or by checking in Software Center
logrotate:
Installed: 3.7.8-6ubuntu5
Candidate: 3.7.8-6ubuntu5
3) What you expected to happen
debug mode should not output an error and should have exitcode 0
4) What happened instead
debug mode prints an error and has exitcode 1
Changed in logrotate (Ubuntu): | |
importance: | Undecided → High |
Status changed to 'Confirmed' because the bug affects multiple users.