====== Обслуживание======
Вот несколько советов по автоматизации некоторых повседневных операций по обслуживанию, необходимых или рекомендуемых для 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//