home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
kermit.columbia.edu
/
kermit.columbia.edu.tar
/
kermit.columbia.edu
/
archives
/
ckermit.zip
/
logrotate
< prev
next >
Wrap
Text File
|
1999-04-22
|
2KB
|
43 lines
# l o g r o t a t e
#
# C-Kermit 7.0 includes a connection log feature. If you enable it by
# putting a LOG CONNECTIONS command in your C-Kermit startup file, each
# new connection is appended to the log. Therefore your connection log
# file just grows and grows. This script (if included in your C-Kermit
# startup file) automatically starts a new log at the beginning of each
# month, and keeps 4 months' worth of logs, discarding older ones.
#
# It works by comparing the yyyymm portion of the modification date
# (\fdate()) of the given file (\%1) with the current yyyymm. If they
# differ, the current file has the yyyymm suffix (from its most recent
# modification date) appended to its name. Then we search through all
# other such files, find the oldest one, and delete it. Thus the current
# log, plus the logs from the most recent four months, are kept. This is
# all done automatically every time you start C-Kermit.
#
define LOGROTATE { ; Define LOGROTATE macro
local \%i \%m \%d \%n \%f MAX
def MAX 4 ; How many months to keep
if not def \%1 - ; No argument given
end 1 \%0: No filename given
if < 1 \ffiles(\%1) - ; Exactly 1 file must match
end 1 \%0: "\%1" - File not found
if > 1 \ffiles(\%1) -
end 1 \%0: "\%1" - Too many files match
.\%d := \fsubstr(\fdate(\%1),1,6) ; Arg OK - get file year & month
if = \%d - ; Compare file year & month
\fsubstr(\v(ndate),1,6) - ; with current year & month
end 0 ; Same year & month - done
rename \%1 \%1.\%d ; Different - rename file
.\%n := \ffiles(\%1.*) ; How many old files
if < \%n \m(MAX) end 0 ; Not enough to rotate
.\%m := \%1.999999 ; Initial compare string
for \%i 1 \%n 1 { ; Loop thru old logs
.\%f := \fnextfile() ; Get next file name
if llt \%f \%m .\%m := \%f ; If this one older remember it
}
delete \%m ; Delete the oldest one
}
log connections ; Now open the (possibly new) log
logrotate \v(home)CX.LOG ; Run the LOGROTATE macro