2012-02-17 61 views
1

我使用PHP/MySQL,但我认为这个问题本质上是语言/ db矛盾。我有一个连接到一个API的PHP脚本,获取响应数据,解析它,然后将其发送到不同的API以存储在其数据库中。有时候这个过程会因为其中一个API的错误而失败。因此,我想轻松跟踪其成功/失败。在数据库中跟踪脚本是否成功完成的最佳方法

我应该说明,在这种情况下,“成功”被定义为脚本从第一个API获取它需要的数据,并成功让它由第二个API处理。因此,“失败”可能导致3件可能的事情:

  1. 首先API抛出一个错误
  2. 其次API抛出一个错误
  3. 我的脚本超时。

该脚本将每天运行一次。我想将成功或失败结果存储在数据库中,以便轻松访问网页并查看结果。我目前正在考虑执行以下操作:

  1. 将当前时间存储在脚本开始处的变量中。
  2. 立即将该时间戳插入到数据库中。
  3. 脚本完成后,再次将同一时间戳插入数据库 。
  4. 如果脚本失败,请在数据库中记录失败原因。

然后根据单个时间戳是否在数据库中有两个条目来衡量成功或失败,而不仅仅是一个。

这是最好的方式来做到这一点,或将其他更好的工作吗?我没有看到任何理由为什么这不起作用,但我觉得必须存在一些公认的标准完成方式。

+0

你的问题是什么? – ComFreek 2012-02-17 14:23:17

+1

似乎你有一种方法可以工作,试试看。 – 2012-02-17 14:25:14

+0

刚刚添加了最后一段。我并不担心我的方法无效。但是,我所描述的需求似乎是必须非常普遍的事情,因此我想知道是否有一些公认的标准方法。 – maxedison 2012-02-17 14:32:21

回答

1

用户宣布关机功能可能是一种替代方案:使用register_shutdown_function()可以decalre回调时,脚本终止执行,whethe rsuccessfully,用户中止或超时

+0

有时我的脚本可能会因为超时而终止而失败(即我提到的某个API会引发错误)。在这种情况下,我假设你提供的这个函数实际上不会被调用。因此,我还需要一种方法来记录脚本是否成功,而不仅仅是测试脚本是否超时。但是,有时候它会因超时而失败,而且这个函数会让我注意到在我的数据库中。那谢谢啦! – maxedison 2012-02-17 14:44:27

+0

我实际上没有尝试register_shutdown_function来查看它是否在发生错误(超时除外)的情况下执行,但它很容易测试 – 2012-02-17 14:46:50

+0

没关系 - 我想我更喜欢捕获其中一个错误在我的脚本中实际发生的是API而不是实际发生的错误。 – maxedison 2012-02-17 14:51:10

1

你可以使用一个锁文件:

  • 在脚本的最开始,你在文件系统中
  • 在脚本的最后的地方创建一个锁文件,如果一切工作好,你从文件系统删除

然后,您只需监视放置这些文件的目录。随着锁定文件的创建日期,你可以找到哪一天不工作。

您可以通过监视脚本来组合这个系统,如果锁定文件存在并且创建日期早于给定时间间隔(例如,如果您的脚本通常在几分钟内运行,则为1小时)。

+0

这与我描述的方法有什么优势? – maxedison 2012-02-17 14:51:40

+0

我会说是,因为有一个数据库连接问题的机会比空文件创建错误更重要。 – 2012-02-17 16:57:54

相关问题