Hitzigrath

Netzwerk-Administrator und Hobby-Fotograf

Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

docs:dokuwiki:config_cleanup

CleanUp-Script

Bei dieser kurzen Dokumentation handelt es sich um ein Script zum Bereinigen der Namespaces in DokuWiki. Es ist auf Basis von Weatherwax erstellt worden.

Die Informationen basieren auf der Beschreibung unter: de:tips:maintenance

Das hier verwendete Script für den Cronjob wird auf das folgende angepasst:

dw-cleanup.sh
#!/bin/bash
 
# Standard CSV-Datei mit den Angaben zu den Wikis
# Format: [Wiki-ID für Syslog-Meldungen],[Wiki-Data-Pfad],[Anzahl Tage, nach denen entfernt werden soll]
csvfile=/srv/www/wikis.csv
 
# auskommentieren, wenn keine Syslog-Meldungen erstellt werden sollen
CMDlog="logger -p user.info -t DokuWiki-CleanUp"
 
 
helpmesg() {
  owncmd=`basename $0`
  cat <<EOF
Usages: $owncmd [<CSV-file>]
        $owncmd -h | -?      Help-Message
 
Parameter:
  <CSV-file>   Comma-separated file with the datas of wikis to clean up.
               Format: <Wiki-ID>,<data-path>,<number of days till to clean up>
EOF
}
 
nscleanup() {
  if [ ! -d "$1/pages/${2##*$1/pages/}" ]
  then
    rm -fr "$1/pages/${2##*$1/pages/}"
    rm -fr "$1/attic/${2##*$1/pages/}"
    rm -fr "$1/meta/${2##*$1/pages/}"
  fi
}
 
mediacleanup() {
  if [ ! -d "$1/pages/${2##*$1/media/}" ]
  then
    rm -fr "$1/media/${2##*$1/media/}"
    rm -fr "$1/media_attic/${2##*$1/media/}"
    rm -fr "$1/media_meta/${2##*$1/media/}"
  fi
}
 
cleanup() {
 
  # $1 ... full path to data directory of wiki
  # $2 ... number of days after which old files are to be removed
 
  # purge files older than $2 days from the attic (old revisions)
  find "$1"/attic/ -type f -mtime +$2 -print0 | xargs -0r rm -f
 
  # remove stale lock files (files which are 1-2 days old)
  find "$1"/locks/ -name '*.lock' -type f -mtime +1 -print0 | xargs -0r rm -f
 
  # remove empty directories in pages
#  find "$1"/pages/ -depth -type d -mtime +$2 -empty -print0 | xargs -0r rmdir
  find "$1"/pages/ -depth -type d -mtime +$2 -empty -exec "$0" nscleanup "$1" {} \;
 
  # remove files older than $2 days from the cache
  find "$1"/cache/?/ -type f -mtime +$2 -print0 | xargs -0r rm -f
 
  # purge files older than $2 days from the media_attic (old revisions)
  find "$1"/media_attic/ -type f -mtime +$2 -print0 | xargs -0r rm -f
 
  # remove empty directories in medias
#  find "$1"/media/ -depth -type d -mtime +$2 -empty -print0 | xargs -0r rmdir
  find "$1"/media/ -depth -type d -mtime +$2 -empty -exec "$0" mediacleanup "$1" {} \;
 
}
 
if [ "$1" == "nscleanup" ]
then
  if [ -n "$2" -a -n "$3" ]
  then
    nscleanup "$2" "$3"
  else
    echo "Fehler beim Aufruf vom Namespace-Cleanup"
  fi
  exit
fi
 
if [ "$1" == "mediacleanup" ]
then
  if [ -n "$2" -a -n "$3" ]
  then
    mediacleanup "$2" "$3"
  else
    echo "Fehler beim Aufruf vom Media-Cleanup"
  fi
  exit
fi
 
while getopts :h opt
do
  case $opt in
    h|?)
      helpmesg
      exit
      ;;
  esac
done
shift $((OPTIND - 1))
parfiles="$@"
 
if [ ! -n "$parfiles" ]
then
  parfiles="$csvfile"
fi
 
for cfile in $parfiles
do
  if [ -r "$cfile" ]
  then
    while read csvline
    do
      csvline=`echo "$csvline" | grep -v "^#"`
      if [ -n "$csvline" ]
      then
        dwID=`echo "$csvline" | awk -F, '{ print $1 }'`
        dpath=`echo "$csvline" | awk -F, '{ print $2 }'`
        days=`echo "$csvline" | awk -F, '{ print $3 }'`
        if [ -w "$dpath" ]
        then
          [ -n "$CMDlog" ] && $CMDlog "cleaning $dwID"
          cleanup "$dpath" $days
          [ -n "$CMDlog" ] && $CMDlog "$dwID cleaned"
        else
          [ -n "$CMDlog" ] && $CMDlog "Data-path for $dwID not writable!"
        fi
      fi
    done < "$cfile"
  else
    [ -n "$CMDlog" ] && $CMDlog "$cfile not readable!"
  fi
done
 
exit

Zu diesem Script sollte dann eine CSV-Datei erzeugt werden, die wie folgt aussehen könnte:

wikis.csv
# Wiki-ID, Data-Path, Cleanup-days
MainWiki,/srv/mainwiki/data,31
AnotherWiki,/srv/otherwiki/data,183
UserWiki,/home/user1/wiki/data,365
#User2Wiki,/home/user2/wiki/data,92

Zeilen, die mit # beginnen werden nicht ausgewertet.

Für einen regelmäßigen Ablauf sollte nun das ganze in der crontab eingetragen werden:

15 3 * * * root /path2script/dw-cleanup.sh /path2csv/wikis.csv

Das war es bereits.

Dieser Artikel ist publiziert unter: CC by-nc-sa

docs/dokuwiki/config_cleanup.txt · Zuletzt geändert: 05.10.2023 - 09:45 von Mischa