logrotate 908 B

12345678910111213141516171819202122232425262728293031323334
  1. #!/bin/bash
  2. ## Simple logrotate script
  3. ## http://superglue.it | Danja Vasiliev, 2014
  4. ##
  5. ## Takes filepath(s) as argument:
  6. ## logrotate /www/access.log [/www/error.log] [/www/admin/admin.log]
  7. ## default settings, redefine in config file mentioned below
  8. ROTATE=30 ## backlogs to keep
  9. DATE=$(date +%d.%m.%y-%H:%M:%S)
  10. LOGS=( $* )
  11. ## source config
  12. CONF='/etc/logrotate.conf'
  13. [[ -e $CONF ]] && . $CONF
  14. function err {
  15. printf %s": "%s"\n" "$(basename $0)" "$1"; exit 1
  16. }
  17. [[ -z $LOGS ]] && err 'missing input file'
  18. [[ ! -e $LOGS ]] && err 'input file not readable'
  19. for FILE in ${LOGS[@]}; do
  20. ## get number of backlogs and purge unwanted
  21. N=( $(ls -1 -r $FILE*.gz &>/dev/null || echo '') )
  22. [[ ${#N[@]} -gt $((ROTATE-1)) ]] && rm -f ${N[@]:$((ROTATE-1)) }
  23. ## compress and move
  24. gzip -f $FILE || err 'failed to gzip file'
  25. mv $FILE.gz "$FILE""$DATE".gz || err 'failed to rename archive'
  26. done
  27. exit 0