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:
#!/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:
# 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.