====== 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: [[doku>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 <]
$owncmd -h | -? Help-Message
Parameter:
Comma-separated file with the datas of wikis to clean up.
Format: ,,
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.
{{description>Bei dieser kurzen Dokumentation handelt es sich um ein Script zum Bereinigen der Namespaces in DokuWiki. Es ist auf Basis von Weatherwax erstellt worden.}}
{{keywords>cleanup, konfiguration, administration}}
{{tag>dokuwiki wartung scripting}}
//Dieser Artikel ist publiziert unter: {{license>by-nc-sa,small}}//