Php 始终在后台运行单个进程

Php 始终在后台运行单个进程,php,Php,如何始终在后台运行进程 我想创建一个进程,根据数据库中的信息管理一些工作队列 我目前正在使用cron作业,每分钟运行一次cron作业,并且有30个具有睡眠(2)间隔的呼叫。虽然这是工作正常,我已经注意到不时有一个种族条件 是否可以一直运行相同的进程?我仍然会定期尝试启动cron作业,但如果它看到自己正在运行,它就会关闭 或者这是个坏主意?是否存在内存泄漏或其他问题 几年前,我不知道MQ系统和NodeJ等。 因此,我使用了如下代码,并将其添加到cron中,以便每分钟都运行: <?php

如何始终在后台运行进程

我想创建一个进程,根据数据库中的信息管理一些工作队列

我目前正在使用cron作业,每分钟运行一次cron作业,并且有30个具有睡眠(2)间隔的呼叫。虽然这是工作正常,我已经注意到不时有一个种族条件

是否可以一直运行相同的进程?我仍然会定期尝试启动cron作业,但如果它看到自己正在运行,它就会关闭


或者这是个坏主意?是否存在内存泄漏或其他问题

几年前,我不知道MQ系统和NodeJ等。 因此,我使用了如下代码,并将其添加到cron中,以便每分钟都运行:

<?php 

// defining path to lock file. example: /home/user1/bin/cronjob1.lock
define('LOCK_FILE', __DIR__."/".basename(__FILE__).'.lock');

// function to check if process is running or not
function isLocked() 
{ 
    // lock file exists, but let's check if it's running?
    if(is_file(LOCK_FILE)) 
    { 
        $pid = trim(file_get_contents(LOCK_FILE)); // reading process id from .lock file
        $pids = explode("\n", trim(`ps -e | awk '{print $1}'`)); // running process ids
        if(in_array($pid, $pids))  // $pid exists in process ids
            return true; // it's ok, process running
    } 

    // making .lock file with new process id in it
    file_put_contents(LOCK_FILE, getmypid()."\n" );  
    return false; // previous process was not running
} 

// if previous process locked to run same script
if(isLocked()) die("Already running.\n"); // locked, exiting


// from this point we run our new process
set_time_limit(0);
while(true) {
    // some ops
    sleep(1);
} 

// cleanup before finishing
unlink(LOCK_FILE);

您可以使用一个名为

一旦安装了节点

永久安装:

 $ [sudo] npm install forever -g
要永远运行脚本,请执行以下操作:

forever start app.js

这不是一个真正的PHP问题。PHP是一种“按请求编译”语言,只有在请求url时,服务器才会编译和运行PHP。如果没有关于您的系统(Linux?Windows?Mac?)的进一步信息,您试图改变什么(SQL数据库?纯文本文件?世界的命运?),我们无法回答任何问题,除了说不,PHP可能不是答案,你应该在你的系统上寻找其他可用的东西。这两者之间发生了什么竞争条件?除了@unstableegle刚才所说的以外,可能是一个很好的读物,你可以尝试防止这种竞争条件。在Unix上,你可以一直运行一个进程,使用
/etc/inittab
来启动它。我们像这样在后台运行了很多PHP脚本。关于这个问题,PHP没有什么特别的。您可以一直运行PHP脚本,就像一直运行任何其他脚本一样。