Linux 服务器上的自动化脚本(不是 cron 作业)


Automated scripts on a Linux Server (not cron jobs)

我正在Linux CentOS服务器上编程一个网站(我计划升级到VPS计划,在那里我将拥有root访问权限)。网站的大部分内容将依赖于自动化的脚本。

我有 2 个关于启动自动化流程的问题。

  • 有什么方法可以启动一个守护进程线程,或者类似的东西,它会一直运行。每次电子邮件帐户收到新电子邮件时,我都需要执行脚本。我知道每分钟都可以运行的 cron 作业,但拥有一个持续运行的脚本将是理想的,因此我可以在新电子邮件到达时执行脚本。

  • 代码(理想情况下是PHP)有什么方法可以启动与主程序同时运行的线程。在我使用的脚本中,imap_open用于连接到电子邮件帐户,每次需要几秒钟。但是,如果我可以同时触发多个并发脚本,那么理想情况下可以减少程序的时间。有什么办法可以做到这一点吗?

对这些问题的任何帮助将不胜感激。

您当然可以编写一个持续运行的守护程序/服务。 有关入门教程,请参阅

http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html

您的守护程序可以实现 SMTP(有可用的现有库来支持这一点)来定期检查电子邮件帐户中是否有新电子邮件并采取相应措施。

这是一个来自SO的答案的问题,讨论了如何使用Python完成所有这些工作

如何使 Python 脚本像 Linux 中的服务或守护程序一样运行

对于第一部分,有两个简单的解决方案:

  1. 使用 Vixie cron @reboot 启动规范以标准用户身份在重新启动时启动守护程序。此作业和每分钟的 cron-job 是唯一能够以用户身份轻松运行守护程序样式服务的机制。

  2. 使用procmail在每次电子邮件传递时启动新脚本。这里的缺点是procmail将在每封电子邮件上运行然后启动一个新程序 - 当您每秒收到一百封电子邮件时,与使用inotify(7)提醒长期程序有关新电子邮件的守护程序相比,这可能是一个严重的障碍。

对于第二部分,查找fork(2)系统调用的包装器。它将程序干净利落地切成两半 - 父程序和子程序 - 并允许每个程序从那时起继续独立执行。如果子级和父级将来需要再次通信,那么也许可以看看 PHP 是否支持线程执行。

那么 incron呢?可能有一种方法可以在您的情况下使用它,但您必须生成文件系统事件(例如创建一个新文件)。