每 5 分钟运行一次 PHP 脚本并避免竞争条件

2023-11-24

我有一个 php 脚本,需要每 5 分钟运行一次。目前我正在使用 cron 作业来运行它(并且效果很好),但我的主机只允许最短时间 15 分钟。

所以我的问题是,我可以使用访问者每5分钟触发一次php脚本的运行吗?我可以轻松地记录它上次运行的时间,并根据经过的时间重新运行它。

然而,我担心竞争条件。重要的是脚本只能运行once每 5 分钟一次。

我的脚本运行大约需要 60 秒。在此期间它会写入几个文件。如果脚本运行多次,就会损坏文件。另外,如果我在 10 分钟内没有访客,那么当下一个访客到达时运行一次就可以了。

有一些标准方法来完成这项任务吗?

Thanks!


您是否考虑过让您的脚本运行无限循环sleep迭代之间等待 5 分钟?

for (;;)
{
  perform_actions();
  sleep(300);
}

或者,您可以拥有一个文件(例如 is_running),并获得独占的lock在最后发布的脚本开始时就可以使用它。至少这样你就不会做出任何破坏性的事情。

您也可以将这两种解决方案结合起来。

$fp = fopen("is_running", "r+");

/* is it already running? */
if (! flock($fp, LOCK_EX | LOCK_NB)) return;

for (;;)
{
  perform_actions();
  sleep(300);
}

然后让 cron 作业仍然每 15 分钟运行一次。如果该进程仍在运行,它将退出,否则它将重新启动并每 5 分钟恢复更新。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每 5 分钟运行一次 PHP 脚本并避免竞争条件 的相关文章

  • 使用 Laravel 4 验证多个文件上传

    如何在 Laravel 4 中验证上传文件的数组 我已将其设置为允许多个文件 并且已测试这些文件是否存在于 Input file files 数组中 但如何验证每个文件呢 这是我尝试过的 notesData array date gt In
  • 如何使用 PHP 正确添加跨站请求伪造 (CSRF) 令牌

    我正在尝试为我网站上的表单添加一些安全性 其中一个表单使用 AJAX 另一个表单是简单的 联系我们 表单 我正在尝试添加 CSRF 令牌 我遇到的问题是令牌有时只显示在 HTML 值 中 其余时间 该值为空 这是我在 AJAX 表单上使用的
  • PHP MySql 百分比

    我的问题是关于百分比 我不是专家 所以我会尽力以更好的方式进行解释 我的 mysql 服务器中有一个表 假设有 700 条记录 如下所示 Name country language Birth Lucy UK EN 1980 Mari Ca
  • PHP 如何判断用户是否按下了 Enter 键或 Submit 按钮?

    我遇到的问题是我在一个表单中有多个提交输入 每个提交输入都有不同的值 我更愿意将它们保留为提交 Whenever the user presses Enter it is as though the topmost submit input
  • 简单的 PHP 条件帮助: if($Var1 = in list($List) and $Cond2) - 这可能吗?

    这是一个可能的功能吗 我需要检查一个变量是否存在于我需要检查的变量列表中 并且 cond2 是否为 true 例如 if row name 1 2 3 Cond2 doThis 它对我不起作用 我在复制粘贴中更改的只是我的列表和变量名称 i
  • 单词之间没有空格的语言(例如亚洲语言)中的断词?

    我想让 MySQL 全文搜索适用于日语和中文文本以及任何其他语言 问题在于这些语言以及可能其他语言通常在单词之间没有空格 当您必须键入与文本中相同的句子时 搜索没有用 我不能只在每个字符之间添加空格 因为英语也必须有效 我想用 PHP 或
  • 如何使用 phpunit 运行单个测试方法?

    我正在努力运行一个名为testSaveAndDrop在文件中escalation EscalationGroupTest php with phpunit 我尝试了以下组合 phpunit EscalationGroupTest escal
  • 如何检查PHP变量是否包含非数字?

    我只是想知道检查 PHP 变量中是否有非数字的方法以及它是否也检测字符之间的空格 需要确保我的表单字段中没有添加任何奇怪的内容 提前致谢 如果您的意思是您只想要一个包含数字的值 那么您可以使用ctype digit http php net
  • 生成大随机数 php [重复]

    这个问题在这里已经有答案了 我想使用 PHP 生成一个包含 75 个字符的数字 我到处寻找 但一无所获 除了这个 http dailycoding com tools RandomNumber aspx http dailycoding c
  • 如何在响应ajax codeigniter后停止执行其他控制器

    我想知道如何在响应输出 json 数据后停止执行函数和涉及的其他控制器 就我这里的情况而言 我只是打电话test 函数于dashboard控制器 In dashboard构造函数将执行MY Login library In MY Login
  • Woocommerce 让产品显示在存档页面中

    我正在尝试让所有产品显示在我商店的存档页面中 我想知道他们的id我正在使用我的一个钩子 它在 wp head 上运行并检查 if is product category 我想以某种方式访问 产品的查询并获取它们的 ID if is prod
  • 如何从父类函数访问子类中定义的常量?

    我从 php net 看到这个例子 但 c MY CONST 仅在 5 3
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • PHP严格标准:声明应该兼容

    我有以下类层次结构 class O Base class O extends O Base abstract class A Abstract public function save O Base obj class A extends
  • 为什么我需要结束 ob_start()?

    php 文档建议我应该用 ob end flush 结束每个 ob start 我在网站的每个页面上使用一个 只是为了允许我在应用程序中的任何位置使用 firephp 日志方法 该应用程序运行良好 但我想知道是否有任何我不知道的东西可能有害
  • 学说迁移后备

    我们正在使用原则迁移 当迁移包含多个操作并且其中一个操作失败时 通常会出现问题 例如 如果迁移添加了 5 个外键 其中第 5 个失败 而字段长度不同 则修复字段错误并重新生成迁移不会not修复整个问题 而现在出现一个与 4 个密钥已存在有关
  • Woocommerce 结账自定义选择字段

    我有以下功能 将选择列表添加到 woo commerce 结账表单中 woocommerce form field airport pickup array type gt select class gt array airport pic
  • SQL 最近日期

    我需要在 php 中获取诸如 2010 04 27 之类的日期作为字符串 并在表中找到最近的 5 个日期 表中的日期保存为日期类型 您可以使用DATEDIFF http dev mysql com doc refman 5 1 en dat
  • 表单计算器脚本基本价格未加载 OnLoad

    我的表单中有一个计算器来计算我的下拉选项选择 function select calculate on change calc input type checkbox calculate on click calc function cal
  • CURL 中的 data-urlencode 是什么意思?

    我搜索了很多个小时试图弄清楚 php curl 中的 data urlencode 是什么 我尝试过这个 但我认为这是不对的 xmlpost object1 file https www lob com goblue pdf 在文档中是 d

随机推荐

  • 如何在 GitHub Actions 表达式语法中引用上下文值?

    我想在其中设置一个环境变量env GitHub Action 的部分并利用GitHub Actions 的上下文和表达式语法 我试过这个 jobs build runs on ubuntu latest env MYVAR format 0
  • 在 Ruby 中使用方法名称从字符串调用方法

    我怎样才能做到他们所说的here 但是在 Ruby 中呢 您将如何在对象上执行该功能 以及你将如何执行全局函数 请参阅 jetxee 的answer在提到的帖子上 示例代码 event name load def load puts loa
  • 如何重新渲染平面列表?

    与 ListView 不同的是 我们可以更新 this state datasource 有没有任何方法或示例来更新 FlatList 或重新渲染它 我的目标是当用户按下按钮时更新文本值 renderEntries item index r
  • 如何在 Visual Studio 代码中调试时扩展数组

    这是我的代码 它是一个简单的排列代码块 void arrange char c int N int start if start N print c N return for int i start i lt N i swap c star
  • iframe 滚动 iOS 8

    我有一个 iframe 我需要它有滚动溢出 它似乎可以在桌面上运行 我使用了一种解决方法使其可以在 iOS 中运行 现在它可以在 Android 和 iOS 上运行 然而 iOS8却失败了
  • 以编程方式映射 servlet,而不是使用 web.xml 或注释

    如何在没有 web xml 或注释的情况下以编程方式实现此映射 任务不是使用任何框架 如 spring 或其他框架
  • 使用 r 从字符串中提取电子邮件地址

    这是 5 个 Twitter 用户描述 这个想法是从每个字符串中提取电子邮件 这是我尝试过的代码 它有效 但可能有更好的东西 我宁愿避免使用 unlist 并使用正则表达式一次性完成它 我见过其他类似的 python perl php 问题
  • Spring MVC 类型转换:PropertyEditor 还是 Converter?

    我正在寻找在 Spring MVC 中绑定和转换数据的最简单的方法 如果可能的话 不做任何xml配置 到目前为止我一直在使用属性编辑器像这样 public class CategoryEditor extends PropertyEdito
  • PowerShell函数不会返回DataTable

    我在 PowerShell v4 0 Windows 7 x64 SP1 上有一个 PowerShell 脚本 它创建了一个非常复杂的数据表 我希望能够轻松地将 DataTable 代码放置在任何地方 因此我决定将其包装在一个简单的函数中
  • 数组通过 ajax post 被截断。 Ajax 发帖限制?

    我有一个多维数组 它由 426 个较小的数组组成 还包含 4 个属性 下面是 426 个数组之一的示例 array Main array 0 gt array 1 of 426 arrays name gt Danny email gt e
  • twitter-bootstrap 关闭警报不起作用

    我无法让它工作 当我单击关闭按钮时 什么也没有发生 这是代码 div class alert alert error alert block style width 200px div
  • 如何从另一个日期选择器中设置日期选择器中的最小日期?

    我目前正在向我的日期选择器添加验证 并且在设置最短日期时遇到问题to日期选择器是在中选择的任何内容from日期选择器 即 如果选择 12 3 15 则日期选择器中的最小日期为 12 3 15 这是我正在使用的代码 from datepick
  • 有时间限制的计算

    我正在尝试编写一个构造 它允许我在给定的时间窗口内运行计算 就像是 def expensiveComputation Double some intensive math val result Option Double timeLimit
  • 通过赋值运算符插入到 std::vector 的索引处

    我是 C 新手 很好奇这是否是插入 std vector 的首选方式 std vector
  • 在 OSX 上静态链接 gfortran 库的正确方法

    我有一个要分发的 Fortran 程序 因此我想静态链接到 gfortran 库 如果我使用以下标志编译程序 gfortran o myprog static libgfortran static libgcc myprog f otool
  • 将向量分割成块,使得每个块的总和近似恒定

    我有一个包含超过 100 000 条记录的大型数据框 其中的值已排序 例如 考虑以下虚拟数据集 df lt data frame values c 1 1 2 2 3 4 5 6 6 7 我想创建 3 组上述值 仅按顺序 以便每组的总和或多
  • 使用 WebDAV 访问 Exchange 2003 收件箱

    你怎么 使用 NET 使用 WebDAV 获取用户收件箱 不是您自己的收件箱 中的电子邮件列表 然后获取每封电子邮件的属性和 或内容 我想这样做而不WebDAV NET 如果可能的话 看看我的这篇关于 webdav 的帖子 希望它能给你一些
  • 实体框架循环引用

    再次尝试这个问题 因为我的第一次尝试几乎没有连贯性 p 所以我非常困惑并使用 Entity Framework Code First 我有一个森林课 我有一个树类 每个森林可以有很多树 当我尝试序列化时 我得到了循环引用 public cl
  • 将数组传递给构造函数而不声明它?

    在处理中 我定义了以下类 class SomeClass SomeClass int someArray println someArray 现在我想创建该类的实例 但在将数组传递给构造函数时遇到问题 SomeClass myVar new
  • 每 5 分钟运行一次 PHP 脚本并避免竞争条件

    我有一个 php 脚本 需要每 5 分钟运行一次 目前我正在使用 cron 作业来运行它 并且效果很好 但我的主机只允许最短时间 15 分钟 所以我的问题是 我可以使用访问者每5分钟触发一次php脚本的运行吗 我可以轻松地记录它上次运行的时