このエントリーをブックマークに追加 このエントリをlivedoorクリップに追加 Yahoo!ブックマークに登録

phpでsessionのエラー、一時ファイルが書き込めない。

2008年9月24日水曜日 by mikuta

phpでこんなエラー。
session管理ができなく、サービスが提供できない最悪な状況。

Warning: Unknown: write failed: No space left on device (28) in Unknown on line 0
Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/session) in Unknown on line 0
パーティションの空き容量が無い状態になっていた。
[root@www ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 149260480 139074300 2481808 99% /
/dev/sda1 101086 12903 82964 14% /boot
tmpfs 500952 0 500952 0% /dev/shm
容量が大きくなっているディレクトリを見つける。
[root@www ~]# du -h | grep [0-9]G
→ログファイルがヤバイ。
[root@www ~]# ls -l /var/log
取り合えず、該当のファイルを削除してしまう。
[root@www ~]# rm -f [ファイル名]
もうこんなことがおきてはいけないので、logrotateを見直す。

logrotateの設定ファイルを確認
[root@localhost ~]# locate logrotate.conf
/etc/logrotate.conf
[root@localhost ~]# cat /etc/logrotate.conf | grep include
include /etc/logrotate.d ←これが設定ファイルの場所。
[root@localhost ~]# ls -l /etc/logrotate.d
total 68
-rw-r--r-- 1 root root 174 Sep 18 2007 httpd
-rw-r--r-- 1 root root 571 Jan 23 2007 mgetty
-rw-r----- 1 root named 163 Dec 20 2007 named
-rw-r--r-- 1 root root 174 Jan 10 2008 pop-before-smtp
-rw-r--r-- 1 root root 329 Apr 5 2007 psacct
-rw-r--r-- 1 root root 61 Oct 12 2007 rpm
-rw-r--r-- 1 root root 68 Aug 14 2007 sa-update
-rw-r--r-- 1 root root 543 Dec 6 2007 squid
-rw-r--r-- 1 root root 228 Jul 9 2001 syslog
-rw-r--r-- 1 root root 48 Aug 23 2006 tux
-rw-r--r-- 1 root root 95 Apr 4 2007 vsftpd.log
-rw-r--r-- 1 root root 89 Dec 6 2007 yum
現在のログと照らし合わせ、足りないlogrotateの設定を追加する。

[root@localhost ~]# vi /etc/logrotate.d/xferlog
/var/log/xferlog {
weekly
nocompress
missingok
}

{}内に設定値を記述することで、様々な設定を行える。
⇒logrotateの設定値の参考

設定値 説明
compress ローテーションされたログをgzipで圧縮する。
create [パーミッション] [ユーザ名] [グループ名] ローテーション後に新たな空のログファイルを作成します。ファイルのパーミッション、ユーザ名、グループ名を指定できます。
daily 毎日ログローテーションする。
ifempty ログファイルが空でもローテーションする。
missingok ログファイルが存在しなくてもエラーを出さない。
monthly 毎月ログローテーションする。
nocompress ローテーションされたログを圧縮しない。
nocreate 新たな空のログファイルを作成しない。
nomissingok ログファイルが存在しない場合エラーを出す。
noolddir ローテーション対象のログと同じディレクトリにローテーションされたログを格納する。
notifempty ログファイルが空ならローテーションしない。
olddir ディレクトリ名 指定したディレクトリ内にローテーションされたログを格納する。
postrotate - endscript postrotateとendscriptの間に記述されたコマンドをログローテーション後に実行する。
prerotate - endscript postrotateとendscriptの間に記述されたコマンドをログローテーション前に実行する。
rotate 回数 指定した回数だけローテーションする。
size ファイルサイズ ログファイルが指定したファイルサイズ以上であればローテーションする。
sharedscripts 複数指定したログファイルに対してpostrotateまたはprerotateで記述されたコマンドを実行する。
weekly 毎週ログローテーションする。


設定ファイルにミスがないか確認
[root@localhost ~]# logrotate -dv /etc/logrotate.d/xferlog

Filed under , having  

0 コメント: