tips:maintenance
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| tips:maintenance [2011-07-15 19:58] – changed script to Bash, extended removal of empty dirs xrat | tips:maintenance [2023-10-10 20:28] (current) – Updated to fix errors with the fact if -e does not work for globs. staze | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Maintenance ====== | ====== Maintenance ====== | ||
| + | |||
| Here are some tips to automate some of the day-to-day maintenance needed or recommended for DokuWiki. | Here are some tips to automate some of the day-to-day maintenance needed or recommended for DokuWiki. | ||
| + | |||
| + | See also the plugins: [[plugin: | ||
| ===== Keep Blacklist up to date ===== | ===== Keep Blacklist up to date ===== | ||
| Line 9: | Line 11: | ||
| ===== Automatic cleanup script ===== | ===== Automatic cleanup script ===== | ||
| - | It is recommended to set up some cleanup process for busy DokuWikis. The following [[wp> | + | It is recommended to set up some cleanup process for busy DokuWikis. The following [[wp> |
| <file bash cleanup.sh> | <file bash cleanup.sh> | ||
| #!/bin/bash | #!/bin/bash | ||
| - | cleanup() { | + | cleanup() |
| + | { | ||
| + | local data_path=" | ||
| + | local retention_days=" | ||
| - | | + | |
| - | # $2 ... number of days after which old files are to be removed | + | find " |
| - | | + | |
| - | find "$1"/attic/ -type f -mtime +$2 -print0 | xargs -0r rm -f | + | find "${data_path}"/locks/ -name ' |
| - | | + | |
| - | find "$1"/ | + | find "${data_path}"/{attic, |
| + | | ||
| - | | + | |
| - | find "$1"/{attic,cache, | + | if test -n "$(find "${data_path}"/ |
| - | | + | then |
| - | + | find "${data_path}"/ | |
| - | # remove files older than $2 days from the cache | + | fi |
| - | | + | |
| } | } | ||
| + | |||
| # cleanup DokuWiki installations (path to datadir, number of days) | # cleanup DokuWiki installations (path to datadir, number of days) | ||
| Line 49: | Line 55: | ||
| ==== Windows -- warmzip ==== | ==== Windows -- warmzip ==== | ||
| - | A script for cleaning out old files on Windows systems is [[http:// | + | A script for cleaning out old files on Windows systems is [[http:// |
| I took the above suggestion to use '' | I took the above suggestion to use '' | ||
| - | My favorite way to run cron jobs on Windows is [[http://www.kalab.com/freeware/pycron/pycron.htm|PyCron]]. | + | My favorite way to run cron jobs on Windows is [[https://sourceforge.net/projects/ |
| <file dos dw-cleanup.bat> | <file dos dw-cleanup.bat> | ||
| Line 75: | Line 81: | ||
| rem Remove empty directories | rem Remove empty directories | ||
| %waRmZip% %wikiHome%\pages /da:365 /df /fo:*.zzz /r /q | %waRmZip% %wikiHome%\pages /da:365 /df /fo:*.zzz /r /q | ||
| + | </ | ||
| + | |||
| + | ==== Windows -- batch script ==== | ||
| + | |||
| + | This is another Windows command shell script for maintaining your dokuwiki base on a Windows environment. | ||
| + | The script uses the free and open source utility find, which can be obtained via [[http:// | ||
| + | |||
| + | All paths are read from the DokuWiki config file. Files to be deleted can be shown before deletion, to prevent accidental deletion of files. | ||
| + | |||
| + | <file dos maintain_dokuwiki.cmd> | ||
| + | @echo off | ||
| + | setlocal | ||
| + | |||
| + | REM This script performs some basic DokuWiki maintenance | ||
| + | |||
| + | REM Copyright (C) 2012 Peter Mosmans | ||
| + | |||
| + | REM This program is free software: you can redistribute it and/or modify | ||
| + | REM it under the terms of the GNU General Public License as published by | ||
| + | REM the Free Software Foundation, either version 3 of the License, or | ||
| + | REM (at your option) any later version. | ||
| + | |||
| + | REM This program is distributed in the hope that it will be useful, | ||
| + | REM but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| + | REM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| + | REM GNU General Public License for more details. | ||
| + | |||
| + | REM You should have received a copy of the GNU General Public License | ||
| + | REM along with this program. If not, see < | ||
| + | |||
| + | REM Please contact support AT go-forward.net for questions and/or feedback | ||
| + | |||
| + | |||
| + | REM Last modification: | ||
| + | set NAME=maintain_dokuwiki | ||
| + | set VERSION=0.13 | ||
| + | |||
| + | REM path to the dokuwiki configuration file enclosed in double quotes | ||
| + | set DOKUWIKICONFIG=" | ||
| + | REM preserve all files that are younger than DAYSTOKEEP days | ||
| + | set DAYSTOKEEP=31 | ||
| + | REM set to true if you want to show results and pause before deleting any files | ||
| + | set SHOWRESULTSFIRST=true | ||
| + | set FIND=c: | ||
| + | set TEMPFILE=%TMP%\%NAME%.tmp | ||
| + | |||
| + | REM see if all tools are present | ||
| + | for %%i in (%FIND%) do ( | ||
| + | if not exist %%i ( | ||
| + | echo sorry, could not find %%i - exiting | ||
| + | echo you can obtain the free GNU tools from gnuwin32.sourceforge.net | ||
| + | exit /b | ||
| + | ) | ||
| + | ) | ||
| + | |||
| + | REM see if the dokuwiki configuration file can be read | ||
| + | if not exist %DOKUWIKICONFIG% ( | ||
| + | echo sorry, could not find DokuWiki config at %DOKUWIKICONFIG% - exiting | ||
| + | exit /b | ||
| + | ) | ||
| + | |||
| + | REM grab the correct paths from the configuration file | ||
| + | for /f " | ||
| + | if /i " | ||
| + | if /i " | ||
| + | if /i " | ||
| + | if /i " | ||
| + | ) | ||
| + | if " | ||
| + | echo sorry, could not find datadir variable in %DOKUWIKICONFIG%, | ||
| + | exit /b | ||
| + | ) | ||
| + | |||
| + | REM use defaults if the paths are not specified | ||
| + | if /i " | ||
| + | if /i " | ||
| + | if /i " | ||
| + | |||
| + | REM purge files older than DAYSTOKEEP days from the attic | ||
| + | %FIND% " | ||
| + | REM remove locks older than one day | ||
| + | %FIND% " | ||
| + | REM remove cache files older than DAYSTOKEEP | ||
| + | %FIND% " | ||
| + | |||
| + | REM show results, if any | ||
| + | for /f " | ||
| + | if /i " | ||
| + | echo files to be deleted: | ||
| + | type %TEMPFILE% | ||
| + | pause | ||
| + | ) | ||
| + | for /f " | ||
| + | ) | ||
| + | |||
| + | REM clean up | ||
| + | del /f /q %TEMPFILE% | ||
| + | |||
| + | endlocal | ||
| </ | </ | ||
| Line 83: | Line 188: | ||
| Example: Restore Playground every 30 min: | Example: Restore Playground every 30 min: | ||
| - | 0,30 * * * * cp -pf / | + | 0,30 * * * * cp -f / |
| Example: Restore all pages in [[: | Example: Restore all pages in [[: | ||
| - | 0,30 * * * * cp -rpf / | + | 0,30 * * * * cp -rf / |
| + | |||
| + | ==== Problems with CAPTCHA plugin ==== | ||
| + | |||
| + | Using the CAPTCHA plugin and the recommended [[tips: | ||
| + | |||
| + | When this occurs, the problem can be easily resolved by removing the related playground files in the meta folder with the next cronjob. | ||
| + | |||
| + | Example: Deletes Playground metafiles every 30 min: | ||
| + | 0,30 * * * * rm -f / | ||
| ===== When cronjob is not available ===== | ===== When cronjob is not available ===== | ||
| Line 103: | Line 217: | ||
| ---- | ---- | ||
| - | Could someone add the appropriate line for [[http:// | + | Could someone add the appropriate line for [[https:// |
| + | ---- | ||
| + | Does the [[plugin: | ||
| + | |||
| + | ---- | ||
| + | This is example of php script to clean old cache files. useful when .sh is not available to run. | ||
| + | |||
| + | <file php cleanup.php> | ||
| + | |||
| + | <?php | ||
| + | /* | ||
| + | * mrlemonade ~ | ||
| + | */ | ||
| + | function getFilesFromDir($dir) { | ||
| + | $files = array(); | ||
| + | if ($handle = opendir($dir)) { | ||
| + | while (false !== ($file = readdir($handle))) { | ||
| + | if ($file != " | ||
| + | if(is_dir($dir.'/' | ||
| + | $dir2 = $dir.'/' | ||
| + | $files[] = getFilesFromDir($dir2); | ||
| + | } | ||
| + | else { | ||
| + | $files[] = $dir.'/' | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | closedir($handle); | ||
| + | } | ||
| + | return array_flat($files); | ||
| + | } | ||
| + | function array_flat($array) { | ||
| + | foreach($array as $a) { | ||
| + | if(is_array($a)) { | ||
| + | $tmp = array_merge($tmp, | ||
| + | } | ||
| + | else { | ||
| + | $tmp[] = $a; | ||
| + | } | ||
| + | } | ||
| + | return $tmp; | ||
| + | } | ||
| + | |||
| + | // Define the folder to clean | ||
| + | $captchaFolder = ' | ||
| + | // Here you can define after how many | ||
| + | // days the files should get deleted | ||
| + | $expire_time = 5; | ||
| + | // Find all files of the given file type | ||
| + | foreach (getFilesFromDir($captchaFolder) as $Filename) { | ||
| + | // Read file creation time | ||
| + | $FileCreationTime = filectime($Filename); | ||
| + | // Calculate file age in seconds | ||
| + | $FileAge = time() - $FileCreationTime; | ||
| + | // Is the file older than the given time span? | ||
| + | if ($FileAge > ($expire_time*60*60*24 )) { | ||
| + | // Now do something with the olders files... | ||
| + | print "The file $Filename is older than $expire_time days \n"; | ||
| + | // For example deleting files: | ||
| + | // unlink($Filename); | ||
| + | } | ||
| + | } | ||
| + | echo ' | ||
| + | ?> | ||
| + | |||
| + | </ | ||
| + | use this at your own risk. --- [[user> | ||
| + | |||
| + | ---- | ||
| + | Cheers, I'd like to add that it is a good idea to clean up orphaned meta data, don't you think? | ||
| + | I do the following (in an R script): | ||
| + | -list all files in the pages directory recursively | ||
| + | -add a column ' | ||
| + | -in pagename exchange '/' | ||
| + | -do the same for the meta directory + exclude some additional files | ||
| + | -remove all entries from the meta-list from which the page name is in the pages-list | ||
| + | -delete all files left in the meta list | ||
| + | Of course one could add a time constraint on it so that you don't use metadata immediately. | ||
| + | |||
| + | Clemo // | ||
tips/maintenance.1310752696.txt.gz · Last modified: by xrat
