【问题标题】:How to run a php program continuously in the server?如何在服务器中连续运行一个php程序?
【发布时间】:2011-05-15 12:16:07
【问题描述】:

我想在服务器中不断运行一个 php 程序,它会下载一些东西并存储它们..

我正在考虑创建一个脚本并在 cron 中运行它..

但我想知道是否有任何其他简单的方法或轻量级组件在连续运行时占用服务器中的内存更少??

我想到了另一个简单的事情,

创建一个具有无限 max_execution 时间的 php 脚本,并在一个 while(true) 循环(无限循环)中运行代码并休眠,然后使用 php 启动程序..

哪种方法更好?

【问题讨论】:

    标签: php cron daemon


    【解决方案1】:

    如果您只是从互联网上下载东西,那么使用 wget 之类的东西不是更明智吗?另一方面,如果您正在抓取/网络抓取,我想做一个 cronjob 会更好

    【讨论】:

      【解决方案2】:

      我创建了一个名为 LooPHP 的库,它有助于抽象出所有 while(1) 的疯狂并提供添加事件源的能力(或多或少它是一个基本的运行循环,你可以在 GLib、Cocoa、node.js 中使用它)。 js)。 examples 中有一些可以让您知道您是否喜欢这种写作风格(基于事件与循环驱动)。

      我建议阅读PHP and daemon tags 的其他一些问题。这是fewofmy的答案。

      但老实说,CRON 是相当轻量级的,除非它需要实时(或对您来说意味着什么),否则将 PHP 编写到守护程序中是比实际工作更多的工作。

      【讨论】:

        【解决方案3】:

        您可以daemonize 一个 PHP 脚本,就像您可以创建 Perl 或 Python 守护程序一样。启动和停止脚本取决于操作系统。有一个 PEAR 类 System_Daemon 可以帮助编写 PHP 守护程序。

        【讨论】:

          【解决方案4】:
          1. 为什么不 SSH 进入机器并在控制台中运行 php?
          2. 如果没有,请执行popen() 在您的 php 脚本中调用 php-cli。
          3. 对需要定期运行的程序使用corntab - 永远不会完成的脚本绝不是一件好事。

          【讨论】:

            【解决方案5】:

            使用 cron 作业非常好......如果您使用脚本,您是否必须使用浏览器调用它,或者每次都在 shell 中调用它?如果是下载东西,你可以将它设置为每小时运行一次或类似的东西。如果您将它用作网络服务器上的脚本,则可能会先运行它,然后再次调用它,因此有两个实例同时运行。

            【讨论】:

            • 这就是为什么我要求一个连续运行的程序,如果它连续运行就没有再次重复任务的风险,但是在通过 cron 运行时有机会重复
            【解决方案6】:

            运行一个 cron - 这就是它们的用途。

            您对循环 while(TRUE)sleep()ing 的想法很不稳定,对于运行 cron 作业的任何其他开发人员来说可能并不那么清楚。

            【讨论】:

            • Cron 没问题,但我想知道是否有任何其他面向服务器的方法会使用更少的内存......如果它连续运行,则没有再次重复任务的风险,但有一个在运行 cron 时有机会重复
            • @kvijayhari 您可以通过 shell 包装器修复 cron 双倍。他是 rsync 的一个示例,但可以修复它以适用于 PHP 脚本。 gist.github.com/714960。它们将在 cron 而不是直接在 PHP 中执行。
            • @kvijayhari 我认为循环和睡眠将需要更多内存,因为它将是一个不断进行的进程。此外,如果某些内存未正确释放,您的文件将开始泄漏内存。 cron 将启动您的进程,它可以运行,然后退出,并将内存返回给您的服务器。
            猜你喜欢
            • 1970-01-01
            • 2015-02-05
            • 1970-01-01
            • 1970-01-01
            • 2018-02-27
            • 1970-01-01
            • 2017-11-26
            • 2011-09-08
            • 1970-01-01
            相关资源
            最近更新 更多