2014-10-05 :-)
_ [wiki][fswiki]fswiki が Lock is busy と言っている
いわゆる wiki ファームとして利用しているん。
ある wiki のページにアクセスすると怒られて、別のある wiki は怒られない。
Software Error: Lock is busy. at plugin/core/ShowPage.pm line 68. at lib/Util.pm line 708.
結局アクセス権が異なるためなんだが、同じ fswiki が生成してるはずなのになぜ異なるんだ。
コード読む。
↑のエラーはここ
wiki3_6_4/plugin/core/ShowPage.pm
#============================================================================== # アクセスログの記録 #============================================================================== sub write_log { my $wiki = shift; my $page = shift; my $ip = $ENV{"REMOTE_ADDR"}; my $ref = $ENV{"HTTP_REFERER"}; my $ua = $ENV{"HTTP_USER_AGENT"}; if(!defined($ip) || $ip eq ""){ $ip = "-"; } if(!defined($ref) || $ref eq ""){ $ref = "-"; } if(!defined($ua) || $ua eq ""){ $ua = "-"; } my $logfile = $wiki->config('log_dir')."/".$wiki->config('access_log_file'); Util::file_lock($logfile); ←←←← これ open(LOG,">>$logfile") or die $!; print LOG Util::url_encode($page)." ".&log_date()." $ip $ref $ua\n"; close(LOG); Util::file_unlock($logfile); }
Util::file_lock はここ。
wiki3_6_4/lib/Util.pm
#=============================================================================== # <p> # 引数で渡したファイルをロックします。 # ファイル操作終了後は必ず同じファイル名でUtil::file_unlockを呼び出して下さい。 # ロックに失敗した場合はdieします。 # </p> # <pre> # Util::file_lock(ファイル名, リトライ回数(≒タイムアウト時間、省略可)); # </pre> #=============================================================================== # ロックしているファイルを記録し、終了時に未解除のロックを解除する保険をつけた方が良いかも知れない。 sub file_lock { my $lock = shift() . ".lock"; my $retry = shift || 5; # debug("file_lock($$): $lock"); if(-e $lock){ my $mtime = (stat($lock))[9]; rmdir($lock) if($mtime < time() - 60); } while(!mkdir($lock,0777)){ die "Lock is busy." if(--$retry <= 0); ←←←← ここで死ぬ sleep(1); } }
mkdir に失敗してるのでアクセス権だろうなあ。
怒られる wiki
% /bin/ls -l total 1532 -rw-r--r-- 1 rin users 1287666 Septe 7 08:38 access.log -rw-r--r-- 1 rin users 199846 Septe 4 02:12 attach.log -rw-r--r-- 1 rin users 49 July 5 2012 deleted.dat -rw-r--r-- 1 rin users 226 Septe 4 02:12 download_count.log -rw-r--r-- 1 rin users 0 Febru 5 2012 freeze.log -rw-r--r-- 1 rin users 2454 Augus 30 21:28 keywords2.cache -rw-r--r-- 1 rin users 814 Augus 30 21:28 pagelist.cache -rw-r--r-- 1 rin users 7795 Augus 30 21:28 rss10.cache
怒られない wiki
% /bin/ls -l total 88 -rw----rw- 1 rin users 69793 Octob 5 19:07 access.log -rw----rw- 1 rin users 16 Decem 14 2011 deleted.dat -rw-r--r-- 1 rin users 453 Decem 14 2011 keywords2.cache -rw----rw- 1 rin users 135 Decem 14 2011 pagelist.cache -rw----rw- 1 rin users 608 Decem 14 2011 rss10.cache
これらの親ディレクトリ。同じコードが生成してるはずなのになぜアクセス権が異なるのかしら。
% /bin/ls -l log total 520 drwx---rwx 2 rin users 512 Oct 5 19:07 ExpertPythonProgramming drwxr-xr-x 2 rin users 512 Sep 5 17:28 IPusingC drwx---rwx 2 rin users 512 Oct 5 19:08 NetBSD -rw----rw- 1 rin users 206954 Oct 5 14:27 access.log -rw-r--r-- 1 rin users 72 Jan 20 2013 deleted.dat -rw----rw- 1 rin users 62 Dec 13 2011 freeze.log -rw-r--r-- 1 rin users 129 Jan 20 2013 keywords2.cache drwxr-xr-x 2 rin users 512 Sep 7 08:38 miwarin drwxr-xr-x 2 rin users 512 Sep 7 12:17 notereading -rw-r--r-- 1 rin users 67 Jan 20 2013 pagelist.cache drwx---rwx 2 rin users 512 May 3 23:02 poji drwx---rwx 2 rin users 512 Sep 15 00:11 pythontips drwx---rwx 2 rin users 512 Oct 5 06:17 qmailReading -rw-r--r-- 1 rin users 3135 Jan 20 2013 rss10.cache drwx---rwx 2 rin users 512 Sep 19 2013 yasiki
なお data も異なる。
% /bin/ls -l data total 128 drwx---rwx 2 rin users 1024 Dec 14 2011 ExpertPythonProgramming -rw----rw- 1 rin users 565 Aug 28 2010 FrontPage.wiki -rw----rw- 1 rin users 3307 Aug 28 2010 Help%2FFSWiki.wiki -rw----rw- 1 rin users 2974 Aug 28 2010 Help%2FHiki.wiki -rw----rw- 1 rin users 3305 Aug 28 2010 Help%2FYukiWiki.wiki -rw----rw- 1 rin users 16 Aug 28 2010 Help.wiki drwxr-xr-x 2 rin users 1024 Jun 3 20:23 IPusingC -rw-r--r-- 1 rin users 28 Jan 20 2013 Menu.wiki drwx---rwx 2 rin users 2048 Apr 14 19:57 NetBSD -rw----rw- 1 rin users 33 Aug 28 2010 PluginHelp.wiki drwxr-xr-x 2 rin users 3072 Aug 30 21:28 miwarin drwxr-xr-x 2 rin users 1536 Feb 2 2014 notereading drwx---rwx 2 rin users 1024 Mar 28 2014 poji drwx---rwx 2 rin users 1024 Dec 14 2011 pythontips drwx---rwx 2 rin users 512 Dec 14 2011 qmailReading drwx---rwx 2 rin users 512 Sep 17 2013 yasiki
CGI を動作させてるのは httpd なんだが www:www なのでそりゃまあ。
えーい
% chmod -R 777 *
このあとどうなったの?
できました!
fswiki の話題ですかね。強引にパーミッションを変更して乗り切った気がします。