2

我正在开发一个小型的内部替代 Tripwire,所以我编写了一个小脚本来散列 JBoss EAP 服务器中的文件,并将路径和散列存储在 MySQL 数据库中。

脚本每天都会将文件系统中的哈希值与数据库中保存的哈希值进行比较,因此任何更改都会被记录并最终使用 JasperServer 进行报告。

该脚本在晚上使用 cron 运行,以避免大量脚本在执行有趣的事情之前同时使用 time.sleep(RANDOM_NUMBER_OF_SECONDS) 来查询数据库,但有时 time.sleep 似乎永远处于休眠状态并且脚本结束时没有任何错误,我检查邮件 cron 发送并且没有记录错误。任何帮助,将不胜感激。我正在使用 jython-standalone-2.5.3、IBM 的 JDK 和在 VMWare 中运行的 RHEL 5.6。

我刚刚发现http://bugs.jython.org/issue1974并且代码注释似乎指出操作系统信号可能导致这种行为,但不确定这是否是我的情况。

如果您想在http://code.google.com/p/pysnapshot/上查看代码结帐

路易斯·加西亚·布斯托斯。

4

1 回答 1

0

我不知道您为什么认为time.sleep()可以减少查询数据库的脚本数量。

IMO ot 最好用于cron定期调用该程序。启动后,它应该检查/tmp/目录中是否是“信号量”文件,例如/tmp/snapshot_working.txt. 如果没有信号量文件,则创建它并写入类似:“快照开始:2012-12-05 22:00:00”。在您的程序完成检查后,它应该删除此文件。如果在启动时程序会找到信号量文件,那么它可以停止或检查保存在此文件中的日期和时间是否看起来“旧”。如果它是“旧的”,则将其删除并开始正常写入日志中发现“旧”文件(管理员可以找到如此长时间的工作快照并终止它)。

在你的情况下做的唯一原因time.sleep()是如果你想在正常工作时间使用这样的脚本而不会对你的数据库进行拒绝服务攻击。示例:在进行 100 次 DB 查询后,您可以少睡一会儿,并让 DB 有时间为其他用户查询提供服务。但我认为程序越早完成越好。

于 2012-12-05T13:19:19.507 回答