htcachecleanを使ってみる
まずは、htcachecleanをシェルから直接起動してみましょう。
とりあえずは、-D オプションを付けておけば、実際に削除されることはありませんので、-v オプションとともに使用すると どんな動作をするのか確認できます。
以下は、Apacheのキャッシュ(mod_cache,mod_disk_cache)を使ってみる のApacheのmod_disk_cacheの設定例の場合のhtcachecleanの実行例です。
$ htcacheclean -v -D -p /tmp/cache -l 10k
Statistics:
size limit 10.0K
total size was 17.0K, total size now 9.2K
total entries was 2, total entries now 1
|
ここでは、オプションをそれぞれ以下のように指定しています。
- -v -D : 出力モード、デモ実行で、シミュレートします。
- -p : キャッシュディレクトリのパスを指定します。ここでは、
/tmp/cache
としています。
( Apacheの設定ファイル内の CacheRoot
にて設定してるパスを指定します。)
- -l : キャッシュディレクトリの上限サイズを指定します。ここでは、
10k
(10KByte)としています。
この結果、出力情報を見ると、以下のことがわかります。
- total size : 実行前の全体サイズが、
17.0K
(Byte)となっています。
- total size now : 実行後の全体サイズが、
9.2K
(Byte)となっています。(ちゃんと 10KByte以下になっています)
- total entries : 実行前のファイル数が、
2
(個)となっています。
- total entries now : 実行後のファイル数が、
1
(個)となっています。(ちゃんと 1個のファイルを削除したことがわかります)
キャッシュディレクトリは、以下のようになっていたので、ファイルサイズが実行後
9.2K
(Byte) となっていることから、
古い方(以下の
赤文字)から削除されているのがわかりますね。
$ ls -lR /tmp/cache/
/tmp/cache/:
合計 8
drwx------ 3 apache apache 4096 4月 2 13:33 2013 5
drwx------ 3 apache apache 4096 4月 2 15:39 2013 p
/tmp/cache/5:
合計 4
drwx------ 2 apache apache 4096 4月 2 13:33 2013 g
/tmp/cache/5/g:
合計 12
-rw------- 1 apache apache 7736 4月 2 13:33 2013 iQZ4J4tNyfDfHRGb_E9w.data
-rw------- 1 apache apache 325 4月 2 13:33 2013 iQZ4J4tNyfDfHRGb_E9w.header
/tmp/cache/p:
合計 4
drwx------ 2 apache apache 4096 4月 2 15:39 2013 p
/tmp/cache/p/p:
合計 16
-rw------- 1 apache apache 9104 4月 2 15:39 2013 SKX8vj@dV8mZ2TSAsBUw.data
-rw------- 1 apache apache 328 4月 2 15:39 2013 SKX8vj@dV8mZ2TSAsBUw.header
|
一通り簡単な確認ができたら、次は、デーモンプロセスで、常駐、常時削除するように設定してみます。
htcachecleanのデーモンを使ってみる
htcachecleanのデーモンを使うために、通常のデーモン管理と同じように、
サービス用のスクリプトを /etc/init.d/htcacheclean を作成して、デーモンの管理を行います。
サービス用のスクリプトを /etc/init.d/htcacheclean を作成する
まずは、サービス用のスクリプトを /etc/init.d/htcacheclean として以下のように作成します。
[/etc/init.d/htcacheclean]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
| #!/bin/bash
#
# htcacheclean Startup script for the Apache cache cleaner
#
# chkconfig: - 85 15
# description: The Apache htcacheclean daemon maintains and prunes the
# size of the mod_disk_cache cache directory.
# processname: htcacheclean
# config: none
### BEGIN INIT INFO
# Provides: htcacheclean
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Should-Start: httpd
# Short-Description: start and stop Apache htcacheclean
# Description: The Apache htcacheclean daemon maintains a mod_disk_cache
### END INIT INFO
# Source function library.
. /etc/rc.d/init.d/functions
prog=$(basename $0 | sed -e 's/^[SK][0-9][0-9]//')
# ↓↓↓ ここから環境変数、パラメータの設定 ↓↓↓
htcacheclean=/usr/sbin/htcacheclean
lockfile=/var/lock/subsys/${prog}
pidfile=/var/log/httpd/${prog}.pid
INTERVAL=5
CACHEPATH=/tmp/cache
LIMIT=100M
OPTIONS="-n -t -i"
# ↑↑↑ ここまで環境変数、パラメータの設定 ↑↑↑
RETVAL=0
start() {
echo -n $"Starting $prog: "
daemon --pidfile=${pidfile} $htcacheclean -d "$INTERVAL" -p "$CACHEPATH" -l "$LIMIT" -P "$pidfile" $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
killproc -p ${pidfile} $htcacheclean
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f ${lockfile}
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status -p ${pidfile} $htcacheclean
RETVAL=$?
;;
restart)
stop
start
;;
condrestart)
if status -p ${pidfile} $htcacheclean >&/dev/null; then
stop
start
fi
;;
*)
echo $"Usage: $prog {start|stop|restart|condrestart|status|help}"
exit 1
esac
exit $RETVAL
|
サービス用のスクリプトを /etc/init.d/htcacheclean を実行する
先に作成した サービス用のスクリプト /etc/init.d/htcacheclean を実行してみましょう。
実行の仕方は、通常のサービスと同じように start/stop で起動・停止できます。
$ /etc/init.d/htcacheclean start
htcacheclean を起動中: [ OK ]
$ /etc/init.d/htcacheclean stop
htcacheclean を停止中: [ OK ]
|
こんな感じで出力されればOKです。
また、起動したら以下のようにプロセスが起動されているはずですので、合わせて確認しておきましょう。
$ ps aux|grep htcacheclean
root 20997 0.0 0.0 5144 644 ? Ss 08:39 0:02 /usr/sbin/htcacheclean -d 5 -p /tmp/cache -l 100M -P /var/log/httpd/htcacheclean.pid -n -t -i
root 21133 0.0 0.0 5436 816 pts/1 S+ 18:56 0:00 grep htcacheclean
|
サービス用のスクリプトを 再起動しても自動的に立ち上がるように設定する
CentOS Scientific Linux の場合
$ chkconfig --add htcacheclean
$ chkconfig --list | grep htcacheclean
htcacheclean 0:off 1:off 2:on 3:on 4:on 5:on 6:off
|
ここまでやっておけば、システム再起動後でもhtcachecleanが動作しますので、キャッシュディレクトリの上限サイズを超えることはないでしょう。
Apacheの
mod_disk_cache は、基本的にキャッシュを削除しません。
有効期限が切れても削除しません。次にキャッシュされるときに上書きするだけです。
そのため、Apacheの
mod_disk_cache を使った場合、キャッシュディレクトリがひたすら膨張することがあります。
その場合、この
htcachecleanを起動しておけば、少なくとも指定したディスク上限サイズ内でキャッシュファイルの削除を行ってくれるので、非常に便利ですし、
Apacheで
mod_disk_cache を使用する場合は、起動しておくべきでしょう。
ただ、これは、ディスクキャッシュされたものをサイズ上限を超えないように削除してくれるだけです。有効期限などは関係ありません。上限サイズが閾値(トリガー)になります。
さらには、削除したいURLを指定してキャッシュを削除することもできません。
つまり、すぐに最新情報に更新したいときは、全削除しかないのです。(ただ、最新バージョンの2.4では改良されているようで、URLを指定できるみたいです。)
これも nginx(
nginx でリバースプロキシ、FastCGIキャッシュのキャッシュを削除する方法をまとめて解説してみた) と同じようにURLからキャッシュファイルを設定できるのですが、それは、次回にでも記事にしようと思います。
コメントを投稿 :