Welcome to Snooda's Blog
    lighttpd有一个功能,就是收到SIGHUP信号时会重新打开日志文件。这样在日志切分时很有用。但最近发现了一个bug。

    就是如果有子进程挂掉。父进程新fork出的子进程accesslog会默认打日志到最最开始父进程启动时的那个文件里。


   看了下代码。原来父进程在收到SIGHUP的时候只是把errorlog重新打开了下。没有重新打开accesslog(没办法,这个句柄是mod_accesslog模块搞的)。所以父进程维护的accesslog句柄一直是最老的。它本身不打accesslog日志倒无所谓。但它fork出的子进程是打的。这样就有问题了。



    一个最简单方法。就是外部脚本判断进程有更新的时候发一个SIGHUP信号过去。

    根治方法就是父进程重新启动子进程时给其发一个SIGHUP信号。

    至于父进程自己处理SIGHUP时重新打开句柄这个我感觉不太好。毕竟那是模块内部数据。lighttpd主干不应该关心。





Tags: ,
    前几天百度快照和流量都恢复了,心情很好,但今天看收录时突然发现迁移前服务器绑定的那个临时域名居然也在收录之列,这个不是一个好的现象,因为如果爬虫同时对两个域名同时抓取,会得到相同的内容,对于重复内容是很不利于收录的。查了下快照,发现百度依旧动作很慢,收录只有一页,还是迁移前的那个测试页,google则全都收录了,怪不得迁移时google非常活跃,现在回想应该不是爬主域名,很可能是发现那个临时域名指向的站点大更新,在爬那个。

   纠结的是nginx默认配置居然不打印请求的host域名,无法考证之前爬虫爬取情况,亡羊补牢,幸亏nginx默认留空了日志第二个字段,打印的是“-”,正好用来打印域名,将-修改为$host,重启后就打印了。


   对于已经收录的临时域名,需要将流量都导入到主域,在nginx里配置了一下301跳转:

    if ($host = 'tmpdomain.com' )
    {  
        rewrite  ^/(.*)$  http://maindomain.com/$1  permanent;
    }



   ok
Tags: ,
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]