LANDISK HACKING DIARY
Since2005/8/17
TOPへ戻る

 


   Samba の ゴミ箱フォルダを定期的に削除する

 

 


普段は tmpwatch を使って削除していたが、どうやら deb パッケージはないようなので、代用となる tmpreaper なるものを使ってみることにした(find で削除するという手もあるが)。tmpwatch よりも安全になったとか?

landisk:~# apt-get -s install tmpreaper


tmpreaper.conf を見てみる。ふむふむ、/tmp ディレクトリを7日間で削除するようになっているみたいだ。で、TMPREAPER_PROTECT_EXTRA に削除されたくないディレクトリを指定すると…。

landisk:~# vi /etc/tmpreaper.conf
TMPREAPER_TIME=7d
TMPREAPER_PROTECT_EXTRA=''
TMPREAPER_DIRS='/tmp/.'

/etc/cron.daily にも、tmpreaper があり、1日1回は実行するようになっているようだ。/etc/tmpreaper.conf を読み込むようになっているみたいなのでそっちに書けばいいかな。

landisk:~# cat /etc/cron.daily/tmpreaper | more

if [ -s /etc/tmpreaper.conf ]; then
. /etc/tmpreaper.conf
fi

TMPREAPER_TIME=${TMPREAPER_TIME:-7d}
TMPREAPER_PROTECT_EXTRA=${TMPREAPER_PROTECT_EXTRA:-''}
TMPREAPER_DIRS=${TMPREAPER_DIRS:-'/tmp/.'}

nice -n10 tmpreaper --mtime-dir --symlinks $TMPREAPER_TIME \
--ctime \
--protect '/tmp/.X*-{lock,unix,unix/*}' \
--protect '/tmp/.ICE-{unix,unix/*}' \
--protect '/tmp/.iroha_{unix,unix/*}' \
--protect '/tmp/.ki2-{unix,unix/*}' \
--protect '/tmp/lost+found' \
--protect '/tmp/journal.dat' \
--protect '/tmp/quota.{user,group}' \
`for i in $TMPREAPER_PROTECT_EXTRA; do echo --protect "'$i'"; done` \
$TMPREAPER_DIRS


まず、どういう挙動をするのか確かめてみないことには不安だったので、TMPREAPER_TIMEを 「1d 」 (1日)にして確かめてみることにした。

〇検証の前段階
 1.LANDISK環境とdebian 環境の/tmp ディレクトリにいくつかのファイルを入れておく。
 2./share 以下に新規に共有ディレクトリ(/share/tamesi)を作成し、.recycle ディレクトリにファイルを入れておく。
   また、/share/tamesi ディレクトリにも消したくない通常のファイルを入れておく。
 3.TMPREAPER_PROTECT_EXTRA に削除したくないディレクトリを指定しておく。あえて日本語ファイル名で。

上記の条件を踏まえて、/etc/tmpreaper.conf を以下のように設定する。

landisk:~# vi /etc/tmpreaper.conf
TMPREAPER_TIME=1d
TMPREAPER_PROTECT_EXTRA='/share/tamesi/.recycle/消すな/.'
TMPREAPER_DIRS='/tmp/. /share/tamesi/.recycle/.'

# ls -la /share/tamesi/ | grep .rec //このパーミッション設定はSamba が自動で行う
drwx------ 3 nobody nogroup 4096 2005-08-28 19:18 .recycle/

〇検証の想定
 1.LANDISK環境の/tmp ディレクトリのファイルは残り、debian環境の/tmp ディレクトリ内は削除されるはず。
 2./share/tamesi/.recycle以下のファイルは、「消すな」ディレクトリを除いて全てのファイル/デイレクトリは削除されるはず。

一応、cronを再起動させておく。

landisk:~# /etc/init.d/cron restart
Restarting periodic command scheduler: cron.


〇検証の結果

検証した結果、1点を除いて想定どおりに行われました。
 1.LANDISK環境の/tmp ディレクトリのファイルは残り、debian環境の/tmp ディレクトリ内は削除された。
 2./share/tamesi/.recycle以下のファイルは、「消すな」ディレクトリも含めて全て削除された。

「消すな」ディレクトリが削除されたのはおそらく指定方法が間違っていたのだと思われる。そもそもゴミ箱の中に消してはいけないディレクトリを指定していること自体が間違っているが。仮に消したくないファイルがある場合は、「/tmp/isdnctrl*」のようにワイルドカード等を利用するといいだろう。

なお、検証した際の smb.conf の設定は以下の通り。

landisk:~# vi /etc/samba/smb.conf
vfs objects = recycle
recycle:repository = .recycle/%u
recycle:keeptree = yes
recycle:touch = yes
recycle:versions = yes
recycle:maxsize = 0

[tamesi]
path = /share/tamesi
read only = No
force create mode = 0777
force directory mode = 0777
guest only = Yes





TOPへ戻る
 
Copyright © KORO All Rights Reserved.