Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:如何使用cron(或其他方法)让PHP脚本每秒运行一次?_Php_Cron - Fatal编程技术网

PHP:如何使用cron(或其他方法)让PHP脚本每秒运行一次?

PHP:如何使用cron(或其他方法)让PHP脚本每秒运行一次?,php,cron,Php,Cron,如果我有一个每分钟运行一次的cron作业,并且第一次迭代运行了62秒,那么第二次迭代会等到第一次迭代结束后才开始,还是会同时运行同一个cron作业 要说明这一点,请参见场景1: |0 |60 |120 |180 |240 |300 ------ Cron Job 1 Taking 60 Seconds --------- Cron Job 2 Taking 90 Seconds ------ Cron Job 3 Taking 90 Secon

如果我有一个每分钟运行一次的cron作业,并且第一次迭代运行了62秒,那么第二次迭代会等到第一次迭代结束后才开始,还是会同时运行同一个cron作业

要说明这一点,请参见场景1:

|0    |60   |120  |180  |240  |300
------ Cron Job 1 Taking 60 Seconds
      --------- Cron Job 2 Taking 90 Seconds
            ------ Cron Job 3 Taking 90 Seconds but overlapping with the previous cron job
上述情况是否会发生,或者场景2是否会发生:

|0    |60   |120  |180  |240  |300
------ Cron Job 1 Taking 60 Seconds
      --------- Cron Job 2 Taking 90 Seconds
               XXX-------Cron Job 3 waiting til the next 1 minute interval starts
我担心的是会有一段30秒的时间,标记为XXX,在此期间不会运行cron作业

我想要完成什么?我想每秒钟无限期地执行一个PHP脚本。它不需要每秒运行一次,但它必须运行,结束,运行,结束,运行,结束。如果一次迭代需要5秒钟,那么它必须在第一次迭代结束后才开始下一次迭代。但它决不能停止。问题是我无法确定迭代的长度。一次迭代可能需要1秒,也可能需要5秒,甚至更长时间

  • 克朗能做到这一点吗?这样我就可以保证无论发生什么,脚本都会在每一秒钟运行
  • 如果不是,我怎么能保证PHP脚本一次又一次地无限期地运行呢

  • 它将启动第二个进程,而不考虑其他实例。在脚本中,您可以检查是否有其他正在运行的进程(例如,如果存在全局PID文件)或其他什么,具体取决于您需要什么。

    它将启动第二个进程,而不管其他实例如何。在脚本中,您可以检查是否有其他正在运行的进程(例如,是否存在全局PID文件)或其他什么,具体取决于您需要什么。

    是。cron启动作业,但不检查以前启动的作业是否已完成。它没有管理任何作业队列。

    是。cron启动作业,但不检查以前启动的作业是否已完成。它没有管理任何作业队列

    第二次迭代会一直开始到第一次迭代结束吗

    对于大多数Unix默认的Vixie cron,答案是“是”

    如何在执行PHP脚本的linux系统上实现每秒间隔

    这个问题很奇怪,请重新表述。但是,如果希望每个脚本的单个实例同时运行,请使用/usr/bin/flock或任何其他互斥工具

    第二次迭代会一直开始到第一次迭代结束吗

    对于大多数Unix默认的Vixie cron,答案是“是”

    如何在执行PHP脚本的linux系统上实现每秒间隔


    这个问题很奇怪,请重新表述。但是,如果您希望每个脚本的一个实例同时运行,请使用/usr/bin/flock或任何其他互斥工具。

    我最终使用它解决了我的所有问题。

    我最终使用它解决了我的所有问题。

    您可以实现一个简单的锁定机制,如下所示

    if(!locked()) {
        lock();
        // your code here
        unlock();
    } else {
        echo "script already running";
    }
    
    function lock()   { file_put_contents("write.lock", 'running'); }
    function locked() { return file_exists("write.lock"); }
    function unlock() { return unlink("write.lock"); }
    

    您可以实现一个简单的锁定机制,如下所示

    if(!locked()) {
        lock();
        // your code here
        unlock();
    } else {
        echo "script already running";
    }
    
    function lock()   { file_put_contents("write.lock", 'running'); }
    function locked() { return file_exists("write.lock"); }
    function unlock() { return unlink("write.lock"); }
    

    不使用cron,您可以研究“后台监控”脚本:


    从这里开始,您似乎需要构建一个简单的作业/任务/工作队列,并使用守护进程相应地进行调度和锁定。

    您可以研究“守护”脚本,而不是使用cron:

    从这里开始,您似乎需要构建一个简单的作业/任务/工作队列,并使用守护进程相应地进行调度和锁定