<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Snooda]]></title> 
<link>http://www.snooda.com/index</link> 
<description><![CDATA[Snooda's Blog]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Snooda]]></copyright>
<item>
<link>http://www.snooda.com/read/</link>
<title><![CDATA[lighttpd的一个日志文件打印切分bug]]></title> 
<author>snooda &lt;admin@snooda.com&gt;</author>
<category><![CDATA[lighttpd]]></category>
<pubDate>Wed, 23 Oct 2013 07:16:32 +0000</pubDate> 
<guid>http://www.snooda.com/read/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;lighttpd有一个功能，就是收到SIGHUP信号时会重新打开日志文件。这样在日志切分时很有用。但最近发现了一个bug。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;就是如果有子进程挂掉。父进程新fork出的子进程accesslog会默认打日志到最最开始父进程启动时的那个文件里。<br/><br/><br/>&nbsp;&nbsp; 看了下代码。原来父进程在收到SIGHUP的时候只是把errorlog重新打开了下。没有重新打开accesslog（没办法，这个句柄是mod_accesslog模块搞的）。所以父进程维护的accesslog句柄一直是最老的。它本身不打accesslog日志倒无所谓。但它fork出的子进程是打的。这样就有问题了。<br/><br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;一个最简单方法。就是外部脚本判断进程有更新的时候发一个SIGHUP信号过去。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;根治方法就是父进程重新启动子进程时给其发一个SIGHUP信号。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;至于父进程自己处理SIGHUP时重新打开句柄这个我感觉不太好。毕竟那是模块内部数据。lighttpd主干不应该关心。<br/><br/><br/><br/><br/><br/><br/>Tags - <a href="http://www.snooda.com/tags/lighttpd/" rel="tag">lighttpd</a> , <a href="http://www.snooda.com/tags/%25E6%2597%25A5%25E5%25BF%2597/" rel="tag">日志</a>
]]>
</description>
</item><item>
<link>http://www.snooda.com/read/#blogcomment</link>
<title><![CDATA[[评论] lighttpd的一个日志文件打印切分bug]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.snooda.com/read/#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>