【问题标题】:Automated scripts on a Linux Server (not cron jobs)Linux 服务器上的自动化脚本(不是 cron 作业)
【发布时间】:2012-06-07 04:20:24
【问题描述】:

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

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

  • 有什么方法可以启动守护线程或类似的东西,它会不断运行。每次电子邮件帐户收到新电子邮件时,我都需要执行一个脚本。我知道可以每分钟运行一次的 cron 作业,但是最好有一个持续运行的脚本,这样我就可以在收到新电子邮件的那一刻执行该脚本。

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

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

【问题讨论】:

  • 有一些解决方案可以在收到电子邮件的那一刻触发 PHP 脚本 - 无需守护程序。也许我可以找到一个链接
  • 在您的情况下,无需运行守护程序。当您的电子邮件帐户收到消息时,您可以添加一种触发器。此触发器将运行您的脚本,不再定期检查。您使用哪个电子邮件客户端?
  • @Idiqual 他在服务器上,我认为他没有运行客户端
  • @Pekka 我打算修改我的评论。我猜有一个 imap 服务器正在运行,或者类似的东西?
  • 是的,有一个 imap 服务器正在运行。我正在使用 PHP 的 imap 类连接到电子邮件收件箱。是的,我在服务器上,所以我没有运行电子邮件客户端。

标签: php linux multithreading concurrency daemon


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    1. 使用 Vixie cron @reboot 启动规范以标准用户身份在重新启动时启动守护程序。这种和每分钟的 cron-jobs 是唯一可以让用户轻松运行守护进程式服务的机制。

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      How to make a Python script run like a service or daemon in Linux

      【讨论】: