我编写了一个 python 脚本,允许用户输入消息、他的电子邮件和时间,他们希望发送电子邮件。这一切都存储在一个mysql数据库中。
但是,如何让脚本在上述时间和日期执行?它需要一个 cron 工作吗?我的意思是说在 4 月 20 日 2:15,脚本将在数据库中搜索 2:15 的所有时间,并发送这些电子邮件。但是对于 2:16 的电子邮件呢?
我正在使用提供的共享主机,所以不能有一个连续运行的脚本。
谢谢
如果你不能有一个连续运行的脚本,那么必须触发它,所以这将不得不依赖于你的操作系统内部。正如您自己所说,在 unix 环境中,cron 作业可以解决问题。
设置 cron 运行脚本,让脚本等待给定时间,然后继续运行和发送,直到下一封电子邮件超过这个给定时间。然后让您的脚本为新的唤醒时间添加一个新的 cron 作业。
看起来这个 django 应用程序是为你的情况的人制作的......
http://code.google.com/p/django-cron/
此外,您的设计似乎有点缺陷。如果它在 2:15 运行,您不想只发送应该在 2:15 发送的电子邮件,而是所有应该在过去发送但尚未发送的电子邮件。
您的数据库应该: A. 发送后删除条目或 B. 在您的数据库表上定义一个列来存储它是否已发送。那么你的逻辑应该使用该列。
每分钟左右一个 cronjob 就可以了。如果您正在考虑这一点,您可能需要注意两件事:
1 - 预计每分钟发送多少封电子邮件?如果您需要 1 秒来发送一封电子邮件,而您每分钟有 100 封电子邮件,那么您将无法完成队列。
2 - 如果一项工作在最后一项完成之前开始,会发生什么?注意不要发送两次电子邮件。您需要确保第一个进程结束(风险:您最终可能会丢弃一封电子邮件),避免启动下一个进程(风险:第一个进程挂起整个队列)或让它们并行工作(风险:同步问题)。
如果您接受 daramarak 的建议 - 让您在脚本末尾添加一个新的 cron 作业 - 如果发生一个错误,您将面临整个系统崩溃的风险。