php - 在 Windows 上运行 PHP 应用程序 - 守护进程还是 cron?

标签 php windows daemon

我需要一些实现建议。我有一个 MYSQL 数据库,它将被远程写入以供本地处理任务,我需要用 PHP 编写的应用程序在这些任务进入时立即执行。

当然,我的 PHP 应用程序需要被告知何时运行。我考虑过使用 cron 作业,但我的应用程序在 Windows 机器上。其次,我需要每隔几秒检查一次,而 cron 只能每分钟检查一次。

我想过编写一个 PHP 守护程序,但我对它如何工作以及它是否是个好主意感到困惑!

我将不胜感激有关执行此操作的最佳方法的任何建议。

最佳答案

pyCron是 Windows 的一个很好的 CRON 替代品:

pyCron

由于这个任务非常简单,我只需将 pyCron 设置为每分钟运行以下脚本:

set_time_limit(60); // one minute, same as CRON ;)
ignore_user_abort(false); // you might wanna set this to true

while (true)
{
    $jobs = getPendingJobs();

    if ((is_array($jobs) === true) && (count($jobs) > 0))
    {
        foreach ($jobs as $job)
        {
            if (executeJob($job) === true)
            {
                markCompleted($job);
            }
        }
    }

    sleep(1); // avoid eating unnecessary CPU cycles
}

这样,如果计算机出现故障,最坏情况下会有 60 秒的延迟。

您可能还想研究信号量或某种锁定策略,例如使用 APC 变量或检查锁定文件是否存在以避免竞争条件,例如使用 APC:

set_time_limit(60); // one minute, same as CRON ;)
ignore_user_abort(false); // you might wanna set this to true

if (apc_exists('lock') === false) // not locked
{
    apc_add('lock', true, 60); // lock with a ttl of 60 secs, same as set_time_limit

    while (true)
    {
        $jobs = getPendingJobs();

        if ((is_array($jobs) === true) && (count($jobs) > 0))
        {
            foreach ($jobs as $job)
            {
                if (executeJob($job) === true)
                {
                    markCompleted($job);
                }
            }
        }

        sleep(1); // avoid eating unnecessary CPU cycles
    }
}

如果您坚持使用 PHP 守护程序,请帮自己一个忙,放弃这个想法,改用 Gearman。

编辑:我曾问过一个您可能感兴趣的相关问题:Anatomy of a Distributed System in PHP .

关于php - 在 Windows 上运行 PHP 应用程序 - 守护进程还是 cron?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5758387/

相关文章:

javascript - 我在 session 变量中传递了一个数组。我需要将击键传递给它以返回值

php - 如果输入有 html,则清理用户输入

php - 如何将localhost phpmyadmin连接到android模拟器

windows - 从远程位置复制文件的命令行

linux - 有没有办法链式加载,例如Linux 中的 Windows

jvm - jscv : Cannot locate JVM library file

bash - 成功启动systemd后执行bash脚本?

php - 从mysql日期格式中提取月份和年份

python - 2 个 Bitnami Django 项目同时运行 Apache WSGI

安卓工作室 : Unable to start the daemon process