我正在开发Tripwire的小型内部替代品,因此我编写了一个小脚本来在JBoss EAP服务器中散列文件,并将路径和散列存储在MySQL数据库中。
脚本每天都会将文件系统中的哈希值与数据库中保存的哈希值进行比较,因此会记录任何更改并最终使用JasperServer进行报告。
该脚本在晚上使用cron运行,以避免大量脚本在执行有趣的事情之前使用time.sleep(RANDOM_NUMBER_OF_SECONDS)同时查询数据库,但有时time.sleep似乎永远睡不着脚本结束没有任何错误,我检查邮件cron发送并没有记录错误。任何帮助,将不胜感激。我正在使用在VMWare中运行的jython-standalone-2.5.3,IBM的JDK和RHEL 5.6。
我刚发现http://bugs.jython.org/issue1974并且代码注释似乎指出操作系统信号可能会导致此行为,但不确定这是否属于我的情况。
如果您想在http://code.google.com/p/pysnapshot/
看到代码结帐LuisGarcíaBustos。
答案 0 :(得分:0)
我不知道为什么你认为time.sleep()
可以减少查询数据库的脚本数量。
IMO最好使用cron
定期调用该程序。启动后,应检查/tmp/
目录中的“信号量”文件是否为“{1}”。如果没有信号量文件,则创建它并写入:“snapshot started:2012-12-05 22:00:00”。程序完成检查后,应删除此文件。如果在启动程序将找到信号量文件,那么它可以停止或检查日期和&保存在此文件中的时间看起来“旧”。如果它是“旧”,则将其删除并开始正常写入日志中找到“旧”文件(管理员可以找到这样长时间工作的快照并终止它)。
在您的情况下,使/tmp/snapshot_working.txt
成为唯一的理由是,如果您希望在正常工作时间使用此类脚本而不对您的数据库进行拒绝服务攻击。示例:在进行100个数据库查询后,您可以稍微休眠一下,并为数据库提供时间来提供其他用户查询。但我认为程序越早越好。