====== メンテナンス ======
このページでは、DokuWiki に必要な日々のメンテナンスのいくつかを自動化するためのヒントを示します。
===== ブラックリストを最新に保つ =====
スパム対策ブラックリストを最新に保つための cron ジョブの設定方法については、[[:ja:blacklist|ブラックリスト]]を参照してください。
===== 自動削除スクリプト =====
高負荷の DokuWiki では、いくつかのファイル削除処理を設定しておくことをおすすめします。以下に示すスクリプトは処理の一例となります。このスクリプトでは 30 日以上経過したすべてのリビジョンを[[:ja:attic|屋根裏部屋 (attic)]] から削除し、古くなったロックファイルや空のディレクトリについても削除します。
#!/bin/sh
# DokuWiki のインストールパスを設定
DOKUWIKI=/path/to/your/wiki
# 30 日以上経過したファイルを屋根裏部屋から削除
find $DOKUWIKI/data/attic/ -type f -mtime +30 -exec rm -f {} \;
# 古くなったロックファイルを削除
find $DOKUWIKI/data/locks/ -name '*.lock' -type f -mtime +1 -exec rm -f {} \;
# 空のディレクトリを削除
find $DOKUWIKI/data/pages/ -depth -type d -empty -exec rmdir {} \;
これを自動的に実行するには、[[man>crontab(5)|cron ジョブ]]を設定します。以下の例では、毎晩深夜 00:05 にスクリプトを実行します。
5 0 * * * /full/path/to/cleanup.sh
必ずすべてが正しく設定できていることを確認してください。間違ったファイルを消したくはない、ですよね?
==== 複数インストール環境用のスクリプト ====
以下に示すシェルスクリプトは、複数の DokuWiki をインストールしている環境で重宝します。このスクリプトは、''-print0'' オプション付きの [[man>find]] コマンドと [[man>xargs]] コマンドの使用方法も示しています。
#!/bin/sh
cleanup() {
# $1 ... Wiki のデータディレクトリのフルパス
# $2 ... 古いファイルが削除されるまでの保持日数
# $2 日以上経過したファイルを屋根裏部屋から削除
find "$1"/attic/ -type f -mtime +$2 -print0 | xargs -0r rm -f
# 古くなった (2 日以上経過した) ロックファイルを削除
find "$1"/locks/ -name '*.lock' -type f -mtime +2 -print0 | xargs -0r rm -f
# 空のディレクトリを削除
find "$1"/pages/ -depth -type d -empty -print0 | xargs -0r rmdir
}
# インストールした Wiki の掃除 (データディレクトリへのパス、日数)
# 利用例:
cleanup /home/user1/htdocs/doku/data 256
cleanup /home/user2/htdocs/mywiki/data 180
cleanup /var/www/superwiki/data 180
==== Windows での自動処理 (waRmZip) ====
Windows システムで古いファイルを掃除するためのスクリプトとして、[[http://winadmin.forret.com/|waRmZip]] があります。このソフトは [[http://sourceforge.net/project/showfiles.php?group_id=88417|SourceForge のページ]]からダウンロードできます。このスクリプトを実行するバッチファイルを書いて、毎日実行するようにスケジューリングしてみましょう。なお、人が言うように、『必ずすべてが正しく設定できていることを確認してください』です。;-)
上記の ''waRmZip'' の利用提案を受けて、以下のバッチファイルを書いてみました。おそらく役に立つと思います。
私が気に入っている Windows での定期実行方法は、[[http://www.kalab.com/freeware/pycron/pycron.htm|PyCron]] を使う方法です。
@echo off
set waRmZip="c:\Program Files\waRmZip\waRmZip.wsf"
set wikiHome="c:\path\to\htdocs\wiki\data"
rem 屋根裏部屋内で 30 日以上経過したファイルをアーカイブディレクトリに移動
%waRmZip% %wikiHome%\attic /ma:30 /md:%wikiHome%_archive\attic /r /q
rem オプション: 30 日以上経過したファイルを屋根裏部屋から削除
rem %waRmZip% %wikiHome%\attic /da:30 /dc /r /q
rem 屋根裏部屋内の空のディレクトリを削除。waRmZip で /df オプションを
rem 利用する場合は /da オプションを設定する必要があります。ファイルを
rem 削除しないように /fo:*.zzz というフィルタを掛けています。
%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
===== 遊び場 (playground) の初期化 =====
Wiki の遊び場 (playground) とその他のページをきれいにしておくには、遊び場とその他のページを元の内容に復元する cron ジョブを 30 分間隔で実行します。
例: [[playground:playground|遊び場]]を 30 分ごとに復元
0,30 * * * * cp -rpf /path/to/savedwiki/data/pages/playground/playground.txt /path/to/dokuwiki/data/pages/playground/
例: "wiki" [[:ja:namespace|名前空間]]内のすべてのページを 30 分ごとに復元
0,30 * * * * cp -rpf /path/to/savedwiki/data/pages/wiki/ /path/to/dokuwiki/data/pages/wiki/