====== Обслуживание====== Вот несколько советов по автоматизации некоторых повседневных операций по обслуживанию, необходимых или рекомендуемых для DokuWiki. См. также плагины: [[plugin:cleanup|cleanup]] и [[plugin:clearhistory|clearhistory]] ===== Поддерживайте черный список в актуальном состоянии ===== См. [[wiki:blacklist|раздел «Черный список»]] о том, как настроить cronjob для поддержания черного списка антиспама в актуальном состоянии. ===== Скрипт автоматической очистки ===== Рекомендуется настроить процесс очистки для загруженных DokuWiki. Следующий скрипт оболочки [[wp>Bash (Unix shell)]] служит примером. Он удаляет старые ревизии с [[wiki:attic|чердака]], служит примером. Он удаляет старые ревизии из [[wiki:caching|cache]]((Обсуждение обслуживания кэша можно также найти [[https://forum.dokuwiki.org/post/22265|на форуме]].)). #!/bin/bash cleanup() { local data_path="$1" # полный путь к каталогу данных вики local retention_days="$2" # количество дней, по истечении которых старые файлы должны быть удалены # удалить файлы старше ${retention_days} дней из attic и media_attic (старые ревизии) find "${data_path}"/{media_,}attic/ -type f -not -name _dummy -mtime +"${retention_days}" -delete # удалить устаревшие файлы блокировки (файлы, которым 1-2 дня) find "${data_path}"/locks/ -name '*.lock' -type f -mtime +1 -delete # удалить пустые каталоги find "${data_path}"/{attic,cache,index,locks,media,media_attic,media_meta,meta,pages,tmp}/ \ -mindepth 1 -type d -empty -delete # удалить файлы старше ${retention_days} дней из кэша if test -n "$(find "${data_path}"/cache/?/ -maxdepth 1 -print -quit &> /dev/null)" then find "${data_path}"/cache/?/ -type f -not -name _dummy -mtime +"${retention_days}" -delete fi } # очистка установок DokuWiki (путь к datadir, количество дней) # несколько примеров: cleanup /home/user1/htdocs/doku/data 256 cleanup /home/user2/htdocs/mywiki/data 180 cleanup /var/www/superwiki/data 180 Для автоматического запуска настройте [[man>crontab(5)|cronjob]]. Следующий пример вызывает скрипт каждый день через 7 минут после полуночи. Для запуска от имени пользователя без прав root удалите ''root''. 7 0 * * * root /full/path/to/cleanup.sh Обязательно настройте все правильно — вы ведь не хотите удалить не то, не правда ли? ==== Windows -- warmzip ==== Скрипт для очистки старых файлов в системах Windows — [[http://winadmin.tumblr.com/post/8005353779/warmzip-clean-up-folders-by-compressing-moving|waRmZip]], доступен [[http://sourceforge.net/project/showfiles.php?group_id=88417|here on SourceForge]]. Напишите пакетный файл для его вызова и запланируйте его запуск на каждый день. И как говорит человек: «Обязательно настройте все правильно»' ;-) Я воспользовался приведенным выше предложением ''waRmZip'' и написал этот пакетный файл — возможно, он поможет. Мой любимый способ запуска заданий cron в Windows — [[https://sourceforge.net/projects/pycron|PyCron]]. @echo off set waRmZip="c:\Program Files\waRmZip\waRmZip.wsf" set wikiHome="c:\path\to\htdocs\wiki\data" rem Переместить файлы attic старше 30 дней в архивное местоположение %waRmZip% %wikiHome%\attic /ma:30 /md:%wikiHome%_archive\attic /r /q rem Параметр: удалить файлы attic старше 30 дней rem %waRmZip% %wikiHome%\attic /da:30 /dc /r /q rem Удалить пустые каталоги attic; waRmZip требует флаг /da при использовании rem /df, поэтому добавьте фильтр для *.zzz, чтобы /da не удалял никакие файлы %waRmZip% %wikiHome%\attic /r /da:31 /df /fo:*.zzz /q rem Удалить устаревшие файлы блокировки %waRmZip% %wikiHome%\locks /da:1 /fo:*.lock /r /q rem Удалить пустые каталоги %waRmZip% %wikiHome%\pages /da:365 /df /fo:*.zzz /r /q ==== Windows -- batch script ==== Это еще один скрипт командной оболочки Windows для поддержки вашей базы dokuwiki в среде Windows. Скрипт использует бесплатную и открытую утилиту find, которую можно получить через[[http://gnuwin32.sourceforge.net/]] Все пути считываются из файла конфигурации DokuWiki. Файлы, которые нужно удалить, можно показать перед удалением, чтобы предотвратить случайное удаление файлов. @echo off setlocal REM Этот скрипт выполняет некоторые основные функции обслуживания DokuWiki REM Авторские права (C) 2012 Питер Мосманс REM Эта программа является свободным программным обеспечением: вы можете распространять ее и/или изменять REM в соответствии с условиями GNU General Public License, опубликованной REM Free Software Foundation, либо версии 3 Лицензии, либо REM (по вашему выбору) любой более поздней версии. REM Эта программа распространяется в надежде, что она будет полезна, REM но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии REM ТОВАРНОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. Подробнее см. в REM GNU General Public License. REM Вы должны были получить копию GNU General Public License REM вместе с этой программой. Если нет, см. . REM Пожалуйста, свяжитесь со службой поддержки по адресу go-forward.net для вопросов и/или отзывов REM Последнее изменение: 02-05-2012 (Питер Мосманс) set NAME=maintain_dokuwiki set VERSION=0.13 REM путь к файлу конфигурации dokuwiki, заключенный в двойные кавычки set DOKUWIKICONFIG="\full\filename\of\your\dokuwiki\conf\local.php" REM сохранить все файлы, которые моложе DAYSTOKEEP дней set DAYSTOKEEP=31 REM установите значение true, если вы хотите отобразить результаты и сделать паузу перед удалением любых файлов set SHOWRESULTSFIRST=true set FIND=c:\tools\find.exe set TEMPFILE=%TMP%\%NAME%.tmp REM посмотрите, все ли инструменты присутствуют 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 проверяем, можно ли прочитать файл конфигурации dokuwiki if not exist %DOKUWIKICONFIG% ( echo sorry, could not find DokuWiki config at %DOKUWIKICONFIG% - exiting exit /b ) REM извлекаем правильные пути из файла конфигурации for /f "usebackq delims=' tokens=2,4" %%i in (%DOKUWIKICONFIG%) do ( if /i "%%i"=="datadir" set DOCUMENTROOT=%%j if /i "%%i"=="olddir" set ATTICDIR=%%j if /i "%%i"=="cachedir" set CACHEDIR=%%j if /i "%%i"=="lockdir" set LOCKDIR=%%j ) if "%DOCUMENTROOT%" == "" ( echo sorry, could not find datadir variable in %DOKUWIKICONFIG%, exiting... exit /b ) REM использовать значения по умолчанию, если пути не указаны if /i "%ATTICDIR%" == "" set ATTICDIR=%DOCUMENTROOT%/attic if /i "%LOCKDIR%" == "" set LOCKDIR=%DOCUMENTROOT%/lock if /i "%CACHEDIR%" == "" set CACHEDIR=%DOCUMENTROOT%/cache REM удалить файлы старше DAYSTOKEEP дней из attic %FIND% "%ATTICDIR%" -type f -mtime +%DAYSTOKEEP% -print > %TEMPFILE% REM снять блокировки старше одного дня %FIND% "%LOCKDIR%" -name "*.lock" -type f -mtime +1 -print >> %TEMPFILE% REM удалить файлы кэша старше DAYSTOKEEP %FIND% "%CACHEDIR%" -type f -mtime +%DAYSTOKEEP% -print >> %TEMPFILE% REM показать результаты, если таковые имеются for /f "usebackq" %%i in (`%FIND% "%TMP%" -size +1 -name %NAME%.tmp`) do ( if /i "%SHOWRESULTSFIRST%"=="TRUE" ( echo files to be deleted: type %TEMPFILE% pause ) for /f "delims=#" %%i in (%TEMPFILE%) do del "%%i" ) REM очистить del /f /q %TEMPFILE% endlocal ===== Поддержание чистоты на детской площадке ===== Чтобы поддерживать чистоту [[playground]] и других страниц вики , используйте задание cron, например, каждые 30 минут, которое восстанавливает Playground и другие страницы до их первоначального содержимого. Пример: восстанавливать игровую площадку каждые 30 минут:: 0,30 * * * * cp -f /path/to/savedwiki/data/pages/playground/playground.txt /path/to/dokuwiki/data/pages/playground/ Пример: восстановление всех страниц в [[wiki:namespace|пространстве имен]] «wiki» каждые 30 минут: 0,30 * * * * cp -rf /path/to/savedwiki/data/pages/wiki/ /path/to/dokuwiki/data/pages/wiki/ ==== Проблемы с плагином CAPTCHA ==== Использование плагина CAPTCHA и обслуживания[[wiki:tips:maintenance#keeping_playground_clean|рекомендуемого метода]] для поддержания чистоты игровой площадки может привести к невозможности редактирования игровой площадки. Если это произошло, проблему можно легко решить, удалив соответствующие файлы Playground в папке meta с помощью следующего задания cron. Пример: удаляет метафайлы Playground каждые 30 минут: 0,30 * * * * rm -f /path/to/dokuwiki/data/meta/playground/playground.* ===== Когда cronjob недоступен ===== Если ваш хостинг не позволяет использовать cronjobs, рассмотрите возможность использования плагин [[plugin:cronojob|cronojob]]. ===== Обсуждение ===== Не могли бы вы предоставить PHP-версии этих скриптов для использования с плагином cronojob? ---- > Что касается приведенного выше скрипта очистки, который использует время изменения файла (mtime), не будет ли безопаснее использовать временную метку в имени файла, чтобы определить, следует ли удалять файл на чердаке или нет? С одной стороны, я бы сказал, что это можно сделать, но, конечно, это сложнее в настройке. Для многих установок будет нормально использовать mtime. С другой стороны, некоторые могут захотеть убедиться, что они очищают старые файлы, несмотря ни на что (например, файлы, оставшиеся после сбоя или критической ошибки PHP). ---- Может ли кто-нибудь добавить соответствующую строку для [[https://forum.dokuwiki.org/post/22265|обслуживания кэша]] в скрипт Windows waRmZip? ---- Справляется ли [[plugin:cleanup|cleanup Plugin]] со всеми вышеперечисленными задачами? Будет ли он рекомендован вместо запуска этих скриптов? ---- Это пример PHP-скрипта для очистки старых файлов кэша. Полезно, когда .sh недоступен для запуска. ($expire_time*60*60*24 )) { // Теперь что-нибудь сделаем со старыми файлами... print "The file $Filename is older than $expire_time days \n"; // Например, удаление файлов: // unlink($Filename); ; } } echo 'ran'; ?> используйте это на свой страх и риск. --- [[user>goldseed|S.C. Yoo]] //2012/02/10 12:49// ---- Привет, я хотел бы добавить, что это хорошая идея — очищать потерянные метаданные, как вы думаете? Я делаю следующее (в скрипте R): рекурсивно вывести список всех файлов в каталоге страниц добавьте в этот список столбец «pagename», который снова будет содержать имя файла, но без базового каталога. в имени страницы замените '/' (или '\') на ':' и удалите расширение файла сделать то же самое для мета-каталога + исключить некоторые дополнительные файлы удалить все записи из мета-списка, из которых имя страницы находится в списке страниц удалить все файлы, оставшиеся в мета-списке Конечно, можно было бы добавить ограничение по времени, чтобы метаданные не использовались немедленно. Clemo //2016/09/23 sometime//