Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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 在数据库中跟踪脚本是否成功完成的最佳方法_Php_Mysql_Tracking - Fatal编程技术网

Php 在数据库中跟踪脚本是否成功完成的最佳方法

Php 在数据库中跟踪脚本是否成功完成的最佳方法,php,mysql,tracking,Php,Mysql,Tracking,我使用的是PHP/MySQL,尽管我认为这个问题本质上是语言/db矛盾的。我有一个PHP脚本,它连接到一个API,获取响应数据,对其进行解析,然后将其发送到另一个API以存储在其数据库中。有时,由于其中一个API出错,此过程会失败。因此,我想很容易地追踪它的成功/失败 我应该澄清,在本例中,“成功”定义为脚本从第一个API获取所需的数据,并由第二个API成功处理。因此,“失败”可能由以下三种情况造成: 第一个API抛出一个错误 第二个API抛出一个错误 我的脚本超时了 此脚本将每天运行一次。我想

我使用的是PHP/MySQL,尽管我认为这个问题本质上是语言/db矛盾的。我有一个PHP脚本,它连接到一个API,获取响应数据,对其进行解析,然后将其发送到另一个API以存储在其数据库中。有时,由于其中一个API出错,此过程会失败。因此,我想很容易地追踪它的成功/失败

我应该澄清,在本例中,“成功”定义为脚本从第一个API获取所需的数据,并由第二个API成功处理。因此,“失败”可能由以下三种情况造成:

  • 第一个API抛出一个错误
  • 第二个API抛出一个错误
  • 我的脚本超时了
  • 此脚本将每天运行一次。我想将成功或失败的结果存储在数据库中,以便我可以轻松访问网页并查看结果。我目前正在考虑做以下工作:

  • 将当前时间存储在脚本开头的变量中
  • 立即将该时间戳插入数据库
  • 脚本完成后,将相同的时间戳插入数据库 再说一遍
  • 如果脚本失败,请在数据库中记录失败原因
  • 然后,我会根据单个时间戳在数据库中是否有两个条目(而不是只有一个条目)来衡量成功或失败


    这是最好的方法,还是其他方法更有效?我看不出这有什么理由不起作用,但我觉得必须存在一些公认的标准方法来实现这一点。

    用户声明的关闭函数可能是一种替代方法:使用您可以在脚本终止时执行回调,而当用户成功中止时,或超时

    您可以使用锁定文件:

    • 在脚本的一开始,您就在文件系统的某个地方创建了一个锁文件
    • 在脚本的最后,如果一切正常,则将其从文件系统中删除
    然后,您只需监视放置这些文件的目录。通过锁定文件的创建日期,您可以找到哪一天不起作用


    您可以通过一个监控脚本组合此系统,该脚本在存在锁文件且创建日期早于给定时间间隔(例如,如果脚本通常在几分钟内运行,则为1小时)时发送警报。

    您似乎有一个可行的方法,请尝试一下。只添加了上一段。我并不担心我的方法行不通。然而,我所描述的需求似乎是非常普遍的,因此我想知道是否有一些公认的标准方法。只记录一个简单的“工作开始时间”记录,然后记录工作结束的时间,怎么样?没有结束时间的作业失败。然后您还将记录完成操作所需的时间。@MarcB-在这种情况下,我需要生成一个唯一的作业ID,因为我不能再使用时间戳作为单个作业的唯一标识符。但那很好,我喜欢记录工作耗时的额外优势。谢谢。有时我的脚本会因为超时而失败而不终止(例如,我提到的一个API会抛出错误)。在这种情况下,我假设您提供的这个函数实际上不会被调用。因此,除了测试脚本是否超时之外,我还需要一种方法来记录脚本是否成功。然而,有时它确实会因为超时而失败,这个函数会让我在数据库中注意到这一点。谢谢!实际上,我还没有尝试使用register\u shutdown\u函数来查看它是否在发生错误时执行(超时除外)但是测试很容易——没关系——我想我更喜欢捕捉其中一个API抛出的错误,而不是让脚本中实际发生错误。与我描述的方法相比,这有什么好处吗?我会说是的,因为发生db连接问题的机会比创建空文件错误更重要。