66

I have the following new logrotate configuration:

/var/log/nexus/nexus.log {
    rotate 7
    missingok
    compress
    delaycompress
    copytruncate
    daily
}

When I run logrotate -d nexus, I get the following:

reading config file nexus
reading config info for /var/log/nexus/nexus.log

Handling 1 logs

rotating pattern: /var/log/nexus/nexus.log  after 1 days (7 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/nexus/nexus.log
  log does not need rotating

My /var/log/nexus/ folder contains the following:

nexus.log
oldlogs.tar.gz

Why isn't LogRotate rotating the nexus.log file? What I was expecting was that the nexus.log file would have been truncated and a new file, something like nexus.log-201106241000, would have been created.

1
  • Also, remember, when you use the -d option, IT DOES NOT ROTATE LOGS. It shows you what it WOULD do it run without the option, like a game plan. Caused me some serious headaches when I thought I could see them rotating, and then they were still there. Apr 1, 2016 at 12:44

4 Answers 4

77

Most likely, the log file is less than a day old and/or has been rotated within the last day and logrotate remembers the history.

If you add -f it'll force a rotation if you really want to (although not 100% sure how that interacts with -d).

You can look at the history, location depends on your distribution, but might be /var/lib/logrotate/status. That file shows when logs were last rotated.

5
  • 4
    In FreeBSD it's /var/run/logrotate.status
    – kaleissin
    Nov 29, 2011 at 10:07
  • Also check for possible use of the -s argument in the invocation for status file location
    – JGurtz
    Oct 6, 2014 at 21:22
  • 3
    -d + -f makes logrotate report "needs rotating" for all files, even the ones that don't match
    – Fluffy
    Apr 24, 2015 at 13:12
  • To add to this, editing the date in the status file to be older than the rotation policy is enough to convince logrotate it needs to rotate the log when it runs again.
    – Centimane
    Oct 25, 2017 at 12:52
  • On CentOS, I modified /var/lib/logrotate.status to get logrotate working. As indicated by EightBitTony, the daily logrotate will remembers the history. Unless the file is in the history already with a date in the past, logrotate won't rotate the file.
    – Mark
    Jan 17, 2019 at 21:45
72

The first time you run logrotate with a new log configuration it doesn't know when the last log rotation occurred, so it just writes a status line in /var/lib/logrotate/status to the effect that it was run today.

When it subsequently runs the following day, it sees that the log is a day old and rotates it as expected. If you don't want to wait, edit logrotate's status file and goose the status date for your log back to the previous day.

When you run logrotate manually, it will work as expected

0
5

Sometimes even if you run logrotate manually, this won't work if you do it the same day and have dateext where default value doesn't include senconds (e.g. -%Y%m%d). Not even if you modify logrotate's status file or when using size directive (e.g. size 200M). At least on CentOS 6, logrotate will fail to rotate your log file because it already exists.

To solve this, you need to use dateformat instead of dateext, with a value like: %Y%m%d%s.

See man logrotate for more information.

2

Beware that by running

logrotate -vdf /etc/logrotate.conf

the event although only simulated will be logged to /var/lib/logrotate.status and subsequent logrotate runs will reply with the mentioned

log does not need rotating
4
  • 1
    I cannot reproduce that on Ubuntu (16.04 and 17.04). If "/var/lib/logrotate.status" is used, you must be used another distro. Ubuntu logs to "/var/lib/logrotate/status". Jul 28, 2017 at 10:12
  • 2
    @Philipp Claßen: You are right this (status file placed at /var/lib/logrotate.status) has been observed while debugging configuration of Logrotate 3.10 on Alpine linux 3.5 within a docker container. But there is no Ubuntu flag in the question definition, is it?
    – helvete
    Jul 28, 2017 at 12:22
  • 1
    Yes, it's alright. I would just mention it because Ubuntu is so popular. I assume many people read this question because they want to fix their server, which today often runs with Ubuntu. Jul 28, 2017 at 13:05
  • 1
    OK, that's right. To be complete I can add that the locationo of the status file at Centos 7 distro is at /var/lib/logrotate/logrotate.status
    – helvete
    Jul 28, 2017 at 13:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.