如何让作为定时任务的Python脚本休眠?

1 投票
6 回答
2321 浏览
提问于 2025-04-16 09:27

我写了一个Python脚本,用来监控CentOS服务器上的一个日志文件,查找特定的值,如果找到了就发送一封邮件。这个脚本每5分钟通过定时任务(cron)运行一次。

我想问的是,怎么才能让这个脚本在发送完第一封邮件后“休眠”一下。我不想让它每5分钟都发送邮件,但它需要在大约一个小时后再醒来检查日志。这个假设是问题能在一个小时内解决。收邮件的人没有权限去关闭定时任务。

我考虑过使用“休眠”这个方法,但不太确定如果脚本在“休眠”状态,定时任务(cron)会不会再次尝试运行这个脚本。

6 个回答

1

当你的脚本发送邮件的时候,顺便也创建一个叫“email_sent.txt”的文本文件。然后在发送邮件之前,先检查一下这个文本文件是否存在。如果它存在,就不要再发送邮件。如果不存在,就发送邮件,并且创建这个文本文件。

这个文本文件的作用是用来标记邮件已经发送过了,这样就不需要再发送一次了。

4

cron确实会再次运行这个脚本。你需要比单纯想“每10分钟睡一下,然后发个邮件”更仔细地考虑这个问题。

你需要把使用场景写出来。

  1. 系统发送消息,用户做了某件事。

  2. 系统发送消息,用户没有做任何事。那为什么还要再发邮件给用户呢?两封邮件有什么不同于一封邮件的呢?也许你应该发短信或者给其他人发邮件。

用户怎么知道事情已经做了?他们怎么取消或者停止这些消息的循环呢?

如果在日志中发现了某个问题,发了一封邮件,然后(在“睡眠”结束之前)又在日志中发现了同样的问题。这算是第二封邮件吗?这是两个事件,还是说这是一封邮件里包含了两个事件呢?

3

@Lennart, @S. Lott:我觉得问题的方向有点反了——这个脚本每五分钟作为一个定时任务运行一次,但在发送了一封错误邮件后,至少要等一个小时才可以再发送一封(即使错误状态还在)。

我认为明显的解决办法是保存一个自我记录——对于每个检测到的问题,记录一个ID和上次发送邮件的时间戳。当检测到问题时,检查这个自我记录;如果这个问题的ID上次发送邮件的时间不到一个小时,就不要再发送邮件。这样,你的程序就可以正常退出,直到下次被定时任务调用。

撰写回答