BlackHole开发日记-设置Mac下开机启动,qmail DNS拦截

今天,太阳照常升起,逃过了一劫,那就开始新的生命吧。

为了把BlackHole推广出去,想要做一个MacOS下的包。调研了mac开机启动的东西,将启动程序写成了一个plist文件,放在/Library/LaunchDaemons下面,脚本是这样的:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
      <key>Label</key>
      <string>blackhole.init</string>
      <key>ProgramArguments</key>
      <array>
        <string>/usr/local/blackhole/blackhole-start.sh</string>
      </array>
        <key>KeepAlive</key>
        <false/>
      <key>RunAtLoad</key>
        <true/>
        <key>StandardErrorPath</key>
        <string>/tmp/blackhole.err</string>
        <key>StandardOutPath</key>
        <string>/tmp/blackhole.out</string>
        <key>UserName</key>
        <string>root</string>
  </dict>
</plist>

事实证明UserName=root那段必须加上,要不然不会用root权限启动,然后就会失败!

重启后一切正常,开始使用BlackHole作为DNS服务器,考察稳定性。

早上来到公司就出事了,主进程启动了,wifesays没启动,导致telnet无响应。悲剧!

为什么wifesays老是启动不起来?

后来知道,因为Spring初始化时是阻塞进行的,包括afterPropertySet方法,如果里面调用了耗时较长的程序,则会阻塞直到服务结束才会继续初始化,而这个过程的顺序是未知的。ehcache初始化的时间挺久(好多秒,不知道为什么),然后就导致wifesays的进程一直等不到Spring初始化结束,这时调用之,就抛出了空指针异常!后来将ehcache做了异步加载,并进行了错误判断,问题解决!

下午使用qmail进行拦截测试的时候出了点问题,后来debug发现qmail竟然打了一条ANY类型的请求!原来还有这种类型,长见识了。

找到几个公用的DNS服务器,以后可以增加多服务器切换的功能。

多服务器的可用性是个问题,刚好最近也在研究服务器的可用性维护。最终实现如下:使用failedTimes和wakeup机制。failedTimes由外部调用指定,当次数过多时,标志为不可用;内部线程定期循环,尝试检查不可用的服务器,一旦可用,则重新标志为可用。

转载于:https://my.oschina.net/flashsword/blog/97390

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值