behaviour in debug mode doesn't match real behaviour
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
| logrotate (Ubuntu) |
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
Алексей (f-mail-r) wrote : | #2 |
Some news? Bug affects 3.8.7-1ubuntu1 version too
Sergey V (sergeyv) wrote : | #3 |
I prepared a patch to fix this issue (atteched).
Can anyone review please?
The attachment "0001-If-
[This is an automated message performed by a Launchpad user owned by ~brian-murray, for any issues please contact him.]
tags: | added: patch |
Sergey V (sergeyv) wrote : | #5 |
Ping?
Sergey V (sergeyv) wrote : | #6 |
Well, now patch is applied to upstream in r477 (svn repo: http://
Any chances to get it in ubuntu?
Sorry for not responding earlier, haven't had a chance to test the new behaviour. Great that this bug is fixed, will test it shortly. Thanks!
Sergey V (sergeyv) wrote : | #8 |
I tested the patch, and seems it works as expected.
#old version, reproduce bug
hostname:
hostname:
/tmp/some.log
{
rotate 4
weekly
size 10
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
}
hostname:
reading config file /tmp/some.conf
Handling 1 logs
rotating pattern: /tmp/some.log
10 bytes (4 rotations)
empty log files are not rotated, old logs are removed
considering log /tmp/some.log
log needs rotating
rotating log /tmp/some.log, log->rotateCount is 4
dateext suffix '-20150317'
glob pattern '-[0-9]
previous log /tmp/some.log.1 does not exist
renaming /tmp/some.log.4.gz to /tmp/some.log.5.gz (rotatecount 4, logstart 1, i 4),
renaming /tmp/some.log.3.gz to /tmp/some.log.4.gz (rotatecount 4, logstart 1, i 3),
renaming /tmp/some.log.2.gz to /tmp/some.log.3.gz (rotatecount 4, logstart 1, i 2),
renaming /tmp/some.log.1.gz to /tmp/some.log.2.gz (rotatecount 4, logstart 1, i 1),
renaming /tmp/some.log.0.gz to /tmp/some.log.1.gz (rotatecount 4, logstart 1, i 0),
renaming /tmp/some.log to /tmp/some.log.1
running postrotate script
running script with arg /tmp/some.log
: "
reload rsyslog >/dev/null 2>&1 || true
"
removing old log /tmp/some.log.5.gz
error: error opening /tmp/some.log.5.gz: No such file or directory
1
hostname:
reading config file /tmp/some.conf
Handling 1 logs
rotating pattern: /tmp/some.log
10 bytes (4 rotations)
empty log files are not rotated, old logs are removed
considering log /tmp/some.log
log needs rotating
rotating log /tmp/some.log, log->rotateCount is 4
dateext suffix '-20150317'
glob pattern '-[0-9]
previous log /tmp/some.log.1 does not exist
renaming /tmp/some.log.4.gz to /tmp/some.log.5.gz (rotatecount 4, logstart 1, i 4),
old log /tmp/some.log.4.gz does not exist
renaming /tmp/some.log.3.gz to /tmp/some.log.4.gz (rotatecount 4, logstart 1, i 3),
old log /tmp/some.log.3.gz does not exist
renaming /tmp/some.log.2.gz to /tmp/some.log.3.gz (rotatecount 4, logstart 1, i 2),
old log /tmp/some.log.2.gz does not exist
renaming /tmp/some.log.1.gz to /tmp/some.log.2.gz (rotatecount 4, logstart 1, i 1),
old log /tmp/some.log.1.gz does not exist
renaming /tmp/some.log.0.gz to /tmp/some.log.1.gz (rotatecount 4, logstart 1, i 0),
old log /tmp/some.log.0.gz does not exist
log /tmp/some.log.5.gz doesn't exist -- won't try to dispose of it
renaming /tmp/some.log to /tmp/some.log.1
running postrotate script
0
# after applying patch, compile new version and check
hostname:
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for gcc... gcc
checking whether ...
Sergey V (sergeyv) wrote : | #9 |
Upstream release 3.9.1 contains this fix.
Sergey V (sergeyv) wrote : | #10 |
Any news here?
Voidenko Ekaterina (katyavoid) wrote : | #11 |
This bug affects me too. Thank you, Sergey.
Please add this patch to Ubuntu.
You have stupid bug and simple fix for it. Why not?
I'm not sure if you're waiting for a confirmation from me, but this patch seems to work perfectly! Merge away :).
Florent (metz-florent) wrote : | #13 |
Bumping for a fix on Ubuntu.
Changed in logrotate (Ubuntu): | |
importance: | Undecided → High |
Status changed to 'Confirmed' because the bug affects multiple users.