severity 460542 minor
tags 460542 wontfix
thanks

On Sun, Jan 13, 2008 at 01:59:24PM +0000, Aaron Swartz wrote:
> I woke up this morning to find my webserver (lighttpd) unresponsive and
> logrotate using up 100% CPU. When I ran strace on logrotate I found:
> 
> rename("/service/lighttpd/logs/error.log.638155266.gz", 
> "/service/lighttpd/logs/error.log.638155267.gz") = -1 ENOENT (No such file or 
> directory)
> rename("/service/lighttpd/logs/error.log.638155265.gz", 
> "/service/lighttpd/logs/error.log.638155266.gz") = -1 ENOENT (No such file or 
> directory)
> rename("/service/lighttpd/logs/error.log.638155264.gz", 
> "/service/lighttpd/logs/error.log.638155265.gz") = -1 ENOENT (No such file or 
> directory)
> rename("/service/lighttpd/logs/error.log.638155263.gz", 
> "/service/lighttpd/logs/error.log.638155264.gz") = -1 ENOENT (No such file or 
> directory)
> rename("/service/lighttpd/logs/error.log.638155262.gz", 
> "/service/lighttpd/logs/error.log.638155263.gz") = -1 ENOENT (No such file or 
> directory)
> rename("/service/lighttpd/logs/error.log.638155261.gz", 
> "/service/lighttpd/logs/error.log.638155262.gz") = -1 ENOENT (No such file or 
> directory)
> rename("/service/lighttpd/logs/error.log.638155260.gz", 
> "/service/lighttpd/logs/error.log.638155261.gz") = -1 ENOENT (No such file or 
> directory)
> rename("/service/lighttpd/logs/error.log.638155259.gz", 
> "/service/lighttpd/logs/error.log.638155260.gz") = -1 ENOENT (No such file or 
> directory)
> rename("/service/lighttpd/logs/error.log.638155258.gz", 
> "/service/lighttpd/logs/error.log.638155259.gz") = -1 ENOENT (No such file or 
> directory)

> /service/lighttpd/logs/*.log {
>         weekly
>         missingok
>         copytruncate
>         rotate 999999999

That line is your problem, and here is the loop that runs based on that
value:

    for (i = rotateCount + logStart - 1; (i >= 0) && !hasErrors; i--) {
        tmp = newName;
        newName = oldName;
        oldName = tmp;
        sprintf(oldName, "%s/%s.%d%s%s", dirName, baseName, i,
                fileext, compext);
        
        message(MESS_DEBUG, "renaming %s to %s (rotatecount %d, logstart %d, i 
%d), \n", oldName, newName,
                rotateCount, logStart, i);
        
        if (!debug && rename(oldName, newName)) {
            if (errno == ENOENT) {
                message(MESS_DEBUG, "old log %s does not exist\n",
                        oldName);
            } else {
                message(MESS_ERROR, "error renaming %s to %s: %s\n",
                        oldName, newName, strerror(errno));
                hasErrors = 1;
            }
        }
    } 

Might I suggest you use dateext instead, as that avoids all the renames?

eg:
     rotate 999999999
     dateext

PS. 999999999 days is 2.7 million years.

-- 
Paul Martin <[EMAIL PROTECTED]>



-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to