2011-01-05 67 views
1

我编写了一个python脚本来监视CentOS服务器上的某个特定值的日志文件,并在发现它时发送一封电子邮件。它每5分钟运行一次cron。如何睡眠一个作为cronjob运行的python脚本?

我的问题是,在发送第一封电子邮件后,让脚本进入睡眠状态的最佳方式是什么。我不希望它每5分钟发送一次电子邮件,但它需要醒来并在一小时左右后再次检查日志。这是假设问题可以在一个小时内解决。接收电子邮件的人员没有shell访问权限来禁用cron。

我想过睡眠,但我不确定cron是否会尝试再次运行脚本,如果另一个进程处于活动状态(睡眠)。

回答

2

@Lennart,@S。 Lott:我认为这个问题有点反其道而行 - 脚本每五分钟运行一次cron作业,但在发送错误电子邮件后,至少一小时内不应再发送另一个作业(即使错误状态持续存在) 。

显而易见的答案,我想,是保存自日志 - 针对检测到的每一个问题,一个ID和电子邮件发送的最后时间的时间戳。当检测到问题时,检查自我日志;如果此问题ID的最后一封电子邮件不到一小时前,请不要发送电子邮件。然后你的程序可以正常退出,直到被cron再次调用。

+0

我认为这是我会尝试和实施的方法。我将添加一条语句来检查脚本开始处的日志,并且只在时间戳超过一个小时时才继续。 – ppyhd 2011-01-05 21:14:23

4

cron将再次运行该脚本。你需要更仔细地考虑这一点,而不仅仅是“睡眠”和“每10分钟发送一次电子邮件”。

你需要写出你的用例。

  1. 系统发送消息并且用户做某事。

  2. 系统发送消息,用户什么也不做。为什么再次给用户发邮件? 2封电子邮件不会做什么?也许你应该发短信或给别人发电子邮件。

用户如何注册某件事情?他们将如何取消或停止这一消息循环?

如果在日志中发现了某些内容,则会发送一封电子邮件,然后(在睡眠完成之前)在日志中再次找到该内容。这是第二封电子邮件吗?这是两起事件。或者那是一封有两件事件的电子邮件?

+0

这些都是好的一点,如果一小时内没有处理这个条件,那么第二封邮件就可以发送出去,而这个邮件可以发送给更广泛的用户。他们将通过修复生成日志消息的问题来停止消息。 – ppyhd 2011-01-05 21:06:29

0

您每五分钟运行一次。你为什么要睡觉?退出。如果您想确保它不会每隔五分钟发送一次电子邮件,那么如果有任何要发送的内容,程序只会发送一封电子邮件。

如果你睡了一个小时,每隔五分钟运行一次,一小时后你将会运行12份(并发送12封电子邮件),这显然不是前进的方式。 :-)

1

当您的脚本发送电子邮件时,使它也创建一个txt文件“email_sent.txt”。然后在发送电子邮件之前检查是否存在此txt文件。如果存在,请勿发送电子邮件。如果不存在,请发送电子邮件并创建文本文件。

的文本文件作为一个指标,电子邮件已经发送,不需要再次发送。

+0

我想过这个,但我该如何重置条件?我需要在一个小时后删除txt文件或者具有读取文件时间戳的逻辑。 – ppyhd 2011-01-05 21:08:52

0

另一种方式去了解,这可能是运行脚本作为一个守护进程,而不是有cron运行它每隔五分钟,把你的逻辑循环。像这样的东西...

while True: 
    # The check_my_logfile() looks for what you want. 
    # If it finds what you're looking for, it sends 
    # an email and returns True. 
    if check_my_logfile(): 
    # Then you can sleep for 10 minutes. 
    time.sleep(600) 
    # Otherwise, you can sleep for 5 minutes. 
    else: 
    time.sleep(300) 
0

由于您正在监视日志文件,因此可能需要检查已经执行日志文件监视的事情。 Logwatch是其中之一,但也有日志分析工具,用于处理所有这些事情对你:

http://chuvakin.blogspot.com/2010/09/on-free-log-management-tools.html

是一些选择一个好的总结。他们会对人们大喊大叫。还有系统监视工具,如opennms或nagios等,他们也做这些事情。

我跟别人有上面说的同意,基本上和cron始终运行在指定的时间的工作,有一个叫工具在它可以让你在未来运行的作业,所以,你可以批量作业5分钟,然后在运行时决定什么时候需要再次运行,并在任何时候再次运行时(无论是5分钟,10分钟还是一小时)提交一份工作。你仍然需要保持某个地方的状态(比如@infrared所说的),以便知道什么时候发送了什么,以及如果你应该关心一些。

我仍然建议使用系统监视工具,它可以很容易地增长和缩放,并且可以处理能够说'我正在处理XX现在停止对我大喊大叫'的人。

祝你好运!

相关问题