I'm stuck in the secret of the logrotat

I have two logrotate files:

/etc/logrotate.d/nginx-size

/var/log/nginx/*.log 
/var/log/www/nginx/50x.log

{
    missingok
    rotate 3
    size 2G
    dateext
    compress
    compresscmd /usr/bin/bzip2
    compressoptions -6
    compressext .bz2
    uncompresscmd /usr/bin/bunzip2
    notifempty
    create 640 nginx nginx
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

      

and

/etc/logrotate.d/nginx-daily

/var/log/nginx/*.log 
/var/log/www/nginx/50x.log

{
    missingok
    rotate 3
    dateext
    compress
    compresscmd /usr/bin/bzip2
    compressoptions -6
    compressext .bz2
    uncompresscmd /usr/bin/bunzip2
    notifempty
    create 640 nginx nginx
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

      

Command logrotate -d -v /etc/logrotate.d/nginx-size

output:

reading config file /etc/logrotate.d/nginx-size
compress_prog is now /usr/bin/bzip2
compress_options is now  -6
compress_ext is now .bz2
uncompress_prog is now /usr/bin/bunzip2

Handling 1 logs

rotating pattern: /var/log/nginx/*.log 
/var/log/www/nginx/50x.log

 2147483648 bytes (3 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
  log does not need rotating
considering log /var/log/nginx/error.log
  log does not need rotating
considering log /var/log/nginx/get.access.log
  log does not need rotating
considering log /var/log/nginx/post.access.log
  log needs rotating
considering log /var/log/www/nginx/50x.log
  log does not need rotating
rotating log /var/log/nginx/post.access.log, log->rotateCount is 3
dateext suffix '-20141204'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
renaming /var/log/nginx/post.access.log to /var/log/nginx/post.access.log-20141204
creating new /var/log/nginx/post.access.log mode = 0640 uid = 497 gid = 497
running postrotate script
running script with arg /var/log/nginx/*.log 
/var/log/www/nginx/50x.log

: "
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
"
compressing log with: /usr/bin/bzip2

      

Same (normal) output on ngnix-daily ..

If I run from root command

logrotate -f /etc/logrotate.d/nginx-size 

      

manually, it does everything. BUT! It doesn't start automatically!

contab:

*/5 5-23 * * * root logrotate -f -v /etc/logrotate.d/nginx-size 2>&1 > /tmp/logrotate_size   
00 04 * * * root logrotate -f -v /etc/logrotate.d/nginx-daily 2>&1 > /tmp/logrotate_daily

      

In addition, the files / tmp / logrotate_daily and / tmp / logrotate_size are always empty.

Cron gives me no errors in / var / log / cron

Dec  4 14:45:01 (root) CMD (logrotate -f -v /etc/logrotate.d/nginx-rz-size 2>&1 > /tmp/logrotate_size   )
Dec  4 14:50:01 (root) CMD (logrotate -f -v /etc/logrotate.d/nginx-rz-size 2>&1 > /tmp/logrotate_size   )

      

What's wrong with this thing? .. Centos 6.5 x86_64, Logrotate version 3.8.7 (from source) + logrotate version 3.7.8 (via rpm).

thanks in advance.

+3


source to share


1 answer


Your redirects are wrong on these cron lines. They will not output error information to these files.

A question about the order of redirection. You want to >/tmp/logrotate_size 2>&1

get what you want.

The main problem here is one of the things described in Debugging a crontab info page.



Namely "Making assumptions about the environment."

Making assumptions about the environment

Graphics programs (X11 applications), java programs, ssh and sudo are known to be problematic to run as cron jobs. This is because they rely on things from interactive environments that may not be available in a cron environment.

To more accurately simulate the cron environment interactively, run

env -i sh -c 'yourcommand'

This will clear all environment variables and run sh, which might be more sparse in functions that your current shell has.

Common problems found this way:

foo: command not found or just foo: not found.

Most likely $ PATH is set in your .bashrc or similar interactive init file. Try to include all commands in full path (or put your ~ / .bashrc source at the beginning of the script you are trying to run).

+3


source







All Articles