Log file rotation script
Corey Donohoe
atmos at atmos.org
Mon Jun 9 22:48:22 MSD 2008
We use logrotate and things work just fine.
/var/log/engineyard/nginx/*.log {
daily
missingok
compress
rotate 30
dateext
notifempty
sharedscripts
extension gz
postrotate
[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
endscript
}
On Mon, Jun 9, 2008 at 4:28 AM, Igor Clark <igor at pokelondon.com> wrote:
> i did almost exactly the same for a virtual-hosted server with loads of logs
> in e.g. /var/www/$HOSTNAME/logs
>
> #!/bin/sh
> #
> # nginx_log_rotate.sh
> #
> # Rotates nginx logs into hour-stamped archive directories
> # and gzips with to-the-second timestamps
>
> NGINX_DIR=/path/to/nginx-install
> PID_FILE=$NGINX_DIR/logs/nginx.pid
>
> for s in /path/to/web/root/*
> do
> echo $s
> if [ -L $s ] ; then # ignore symlinks, if any
> continue
> fi
>
> log_dir=$s/logs
> date_dir=`date +%Y/%m/%d/%H` # change this to the precision
> you want, and match with crontab frequency
>
> if [ -r ${log_dir}/access_log ] && [ -r ${log_dir}/error_log
> ] ; then
>
> # make new timed dir
> /bin/mkdir -p ${log_dir}/${date_dir} > /dev/null 2>&1
>
> # move in current logs
> /bin/mv ${log_dir}/access_log
> ${log_dir}/${date_dir}/access_log
> /bin/mv ${log_dir}/error_log
> ${log_dir}/${date_dir}/error_log
>
> # tell nginx to reopen logs
> kill -USR1 `cat $PID_FILE`
>
> # compress old
> compress_stamp=`date +%Y%m%d-%H%M%S`
> /bin/gzip -S _$compress_stamp.gz
> ${log_dir}/${date_dir}/access_log &
> /bin/gzip -S _$compress_stamp.gz
> ${log_dir}/${date_dir}/error_log &
>
> fi
> done
>
>
> On 9 Jun 2008, at 03:07, Dave Cheney wrote:
>
>> I wrote this a while ago which does the trick
>>
>> #!/bin/bash
>>
>> YEAR=`date "+%Y"`
>> MONTH=`date "+%m"`
>> DAY=`date "+%d"`
>>
>> HOSTNAME=`hostname -s`
>>
>> LOG_FILES="access.log error.log"
>>
>> DATE=$YEAR/$MONTH/$DAY
>>
>> LOG_ROOT=/var/log
>> NGINX_LOG_ROOT=$LOG_ROOT/nginx
>>
>> # make path
>>
>> mkdir -p $NGINX_LOG_ROOT/$DATE
>>
>> # touch and symlink in new log files
>>
>> for FILE in $LOG_FILES; do
>> LOG_FILE=$NGINX_LOG_ROOT/$DATE/$HOSTNAME.$FILE
>> touch $LOG_FILE
>> ln -fs $LOG_FILE $NGINX_LOG_ROOT/$FILE
>> done
>>
>> # tell nginx to re-open its log files
>>
>> kill -USR1 `cat /var/run/nginx.pid`
>>
>>
>>
>>
>> On 09/06/2008, at 11:50 AM, Rt Ibmer wrote:
>>
>>> Hi - does anyone have a log file rotation script for nginx they can
>>> share? Basically just looking for something simple I can set up in cron once
>>> a day that will tell nginx to roll the log file and set its file name to the
>>> current date, and then gzip it. Thanks!
>>>
>>>
>>>
>>>
>>>
>>>
>>
>>
>
>
>
>
>
--
Corey Donohoe
http://www.atmos.org/
http://www.engineyard.com/
More information about the nginx
mailing list