All pastes #1064873 Raw Edit

logd

public shellscript v1 · immutable
#1064873 ·published 2008-07-07 18:53 UTC
rendered paste body
#!/bin/sh## logd: rotate logfilesPROG="$0"error() {	echo 1>&2 "ERROR: $1"	exit 127}warn() {	echo 1>&2 "WARNING: $1"}usage() {	error "Usage: $PROG LIMIT{k|s} FILE CYCLES"}rotate() {	local FILE="$1"	local COUNT="$2"	for ITEM in $(seq $COUNT \-1 0); do		CURFILE="${FILE}.${ITEM}"		NEXTFILE="${FILE}.$((${ITEM}+1))"		if [ "${ITEM}" = "${COUNT}" ]; then			rm "${CURFILE}" 2>/dev/null		else			mv "${CURFILE}" "${NEXTFILE}" 2>/dev/null		fi	done	mv "${FILE}" "${FILE}.0" && touch "${FILE}"	echo rotated}chksize() {	local FILE="$1"	du -k "${FILE}" | cut -f 1}THRS="$1"FILE="$2"CYCL="$3"case "$THRS" in	*k)		TYPE=size		LIMIT="${THRS%[ks]}"		;;	*s) 		TYPE=time		LIMIT="${THRS%[ks]}"		COUNTER="${LIMIT}"		;;	\?)		usage		;;esactest "${LIMIT:=-1}"	-gt 0		|| usagetest "${CYCL:=-1}"	-gt 0		|| usagetest			-f ${FILE}	|| usagewhile :; do	if [ "${TYPE}" = "size" ]; then		if [ "$(chksize "${FILE}")" -gt "${LIMIT}" ]; then			rotate "${FILE}" "${CYCL}"		fi	else		if [ "${COUNTER}" -eq 0 ]; then			rotate "${FILE}" "${CYCL}"			COUNTER="${LIMIT}"		fi		COUNTER="$((${COUNTER}-1))"	fi	sleep 1done