PHP:如何使用cron(或其他方法)让PHP脚本每秒运行一次?
如果我有一个每分钟运行一次的cron作业,并且第一次迭代运行了62秒,那么第二次迭代会等到第一次迭代结束后才开始,还是会同时运行同一个cron作业 要说明这一点,请参见场景1: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
|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秒,甚至更长时间
它将启动第二个进程,而不考虑其他实例。在脚本中,您可以检查是否有其他正在运行的进程(例如,如果存在全局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: 从这里开始,您似乎需要构建一个简单的作业/任务/工作队列,并使用守护进程相应地进行调度和锁定