我正在Linux CentOS服务器上编程一个网站(我计划升级到VPS计划,在那里我将拥有root访问权限)。网站的大部分内容将依赖于自动化的脚本。
我有 2 个关于启动自动化流程的问题。
-
有什么方法可以启动一个守护进程线程,或者类似的东西,它会一直运行。每次电子邮件帐户收到新电子邮件时,我都需要执行脚本。我知道每分钟都可以运行的 cron 作业,但拥有一个持续运行的脚本将是理想的,因此我可以在新电子邮件到达时执行脚本。
-
代码(理想情况下是PHP)有什么方法可以启动与主程序同时运行的线程。在我使用的脚本中,imap_open用于连接到电子邮件帐户,每次需要几秒钟。但是,如果我可以同时触发多个并发脚本,那么理想情况下可以减少程序的时间。有什么办法可以做到这一点吗?
对这些问题的任何帮助将不胜感激。
您当然可以编写一个持续运行的守护程序/服务。 有关入门教程,请参阅
http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html
您的守护程序可以实现 SMTP(有可用的现有库来支持这一点)来定期检查电子邮件帐户中是否有新电子邮件并采取相应措施。
这是一个来自SO的答案的问题,讨论了如何使用Python完成所有这些工作
。如何使 Python 脚本像 Linux 中的服务或守护程序一样运行
对于第一部分,有两个简单的解决方案:
-
使用 Vixie cron
@reboot
启动规范以标准用户身份在重新启动时启动守护程序。此作业和每分钟的 cron-job 是唯一能够以用户身份轻松运行守护程序样式服务的机制。 -
使用
procmail
在每次电子邮件传递时启动新脚本。这里的缺点是procmail
将在每封电子邮件上运行然后启动一个新程序 - 当您每秒收到一百封电子邮件时,与使用inotify(7)
提醒长期程序有关新电子邮件的守护程序相比,这可能是一个严重的障碍。
对于第二部分,查找fork(2)
系统调用的包装器。它将程序干净利落地切成两半 - 父程序和子程序 - 并允许每个程序从那时起继续独立执行。如果子级和父级将来需要再次通信,那么也许可以看看 PHP 是否支持线程执行。
那么 incron呢?可能有一种方法可以在您的情况下使用它,但您必须生成文件系统事件(例如创建一个新文件)。