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