I am trying to get logrotate to work on my VPS to rotate my apache files weekly. Currently the contents of the apache2 config file is as such.
"/var/www/user/site.com/logs/*.log" {
weekly
missingok
rotate 8
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
/etc/init.d/apache2 reload > /dev/null
endscript
}
I've left it for two weeks now and nothing has changed as far as I can tell. When I simulate it from the command line I get the following output.
user@geneva:/var/lib/logrotate$ /usr/sbin/logrotate -d /etc/logrotate.d/apache2
reading config file /etc/logrotate.d/apache2
reading config info for "/var/www/user/site.com/logs/*.log"
Handling 1 logs
rotating pattern: "/var/www/user/site.com/logs/*.log" weekly (8 rotations)
empty log files are not rotated, old logs are removed
considering log /var/www/user/site.com/logs/access.log
log does not need rotating
considering log /var/www/user/site.com/logs/error.log
log does not need rotating
not running postrotate script, since no logs were rotated
Any ideas as to what Iv'e configured wrong?
My status file is empty too 🙁
user@geneva:~$ cat /var/lib/logrotate/status
logrotate state -- version 2
Update
I deleted the status file and did a force run of logrotate and now the logs look like they have been rotated and the status file looks more promising!
sudo rm /var/lib/logrotate/status
sudo /usr/sbin/logrotate -f /etc/logrotate.conf
Best Answer
I think that
weekly
means that logrotate wants to see at least a week old entry for your access.log file in order to rotate it.Hence the problem seems to be that you are not storing the state entry to trigger the rotation.
Here is a stepped through example of the simple of case, of how logrotate decides to rotate a logfile
(these are fedora paths, Ubuntu, Centos etc may be different)
(I made a few request to
http://localhost
so there are some entries in access_log, otherwise logrotate never rotates...)So I have set my logrotate for apache to weekly like so;
and originally there is no entry in the
/var/lib/logrotate.status
fileSo logrotate does not rotate the
access_log
file;However if I run logrotate manually like so;
there is now an entry in the state file for the httpd access_log;
However apache is still not going to rotate the log, because the entry is only 0 days old (2012-5-11);
However if you edit the status file with vi
vi /var/lib/logrotate.status
so something like this to set the date to more than a week...;Then logrotate now correctly rotates the file due to the date in the state file
2012-4-11
being more than a week ago from today2012-5-11
(bear in mind that the
-d
causes a dry-run, hence is only useful for inspecting, you have to actually run the command without-d
to make status entries or rotate files etc)