服务程序监测框架的设计
OS:Linux
部署:Amazon EC2
背景:系统中有一些 run away 的服务程序 s,由 cron 启动,跑完结束。s 的任务是处理 /tmp/s 下多个子目录中的文件。s 在启动时会读取 /tmp/s/.concurrent-level 文件确定 fork 的子进程的数目。每个 /tmp/s 下的子目录同一时间只能有一个进程访问,所以每个 s 子进程会在自己工作路径设置锁文件,并且跳过有锁文件的目录。
s 在执行过程中,会写入一个 log 文件,内容类似 apache access log,包括每个进程自己的 PID,记录时间和进度信息。
cron 每分钟执行一次 s。
目标:
做一个守护进程,监测一个或多个文件变化(类似 tail -f),以行为单位进行匹配,按照配置文件指定的状态机激发不同的事件(如:看见 /^Process end/ 时,调用脚本 /tmp/s-ended)
想法:
tail -f 据说使用的是 inotify / dnotify 等技术(http://www.quora.com/How-is-tail-f-implemented )。启子进程 tail -f 每个 log 文件,poll (或其它方式等待变化)
问题:
配置文件(状态机)定义。如何通过简单清晰的方式(JSON)表达相对完整的状态变化。