如何检查流程是否完成?

时间:2016-08-28 18:10:13

标签: php bash

我有一个php脚本,目前由webhook直接调用。 webhook方法一直很好,直到过去一周,请求量对API速率限制造成问题。

我一直试图做的是只有在没有进程运行的情况下才能通过webhooks调用第二个PHP文件($path/webhook-receiver.php)。我将使用推荐的进程用户webb,它位于调用的脚本($path/event-finance-reporting.php)中,它将创建一个文件作为第一个操作,并删除该文件作为最后一个执行。

在调用脚本之前,自动化将检查目录以确保它是空的,否则它将向用户发回错误,告诉用户等待当前作业完成后再提交另一个作业。

我现在遇到的问题是$command1$command2'. both end up invoking the $ path / webhook-reciever.php instead of $ path / event-finance-reporting.php`。

$command1 = "php -f  $path/event-finance-reporting.php 123456789";
$command2 = "/usr/bin/php -q -f  $path/event-finance-reporting.php 123456789";

任何人都知道为什么会这样?

1 个答案:

答案 0 :(得分:1)

目标是一次只运行一个event-finance-reporting.php实例。一种策略是创建一个唯一的锁文件,如果它存在则不运行,并在完成时将其删除,例如:

$lockfilepath = '.../event-finance-reporting.lock';
if(file_exists($lockfilepath)){
  print("try again later");
  exit();
}
touch($lockfilepath);
...
// event-finance-reporting.php code
...
unlink($lockfilepath);

您还可以在if中执行更复杂的操作,例如检查锁定文件的年龄,然后删除并忽略它,如果它被一个崩溃的event-finance-reporting.php实例遗留下来。

使用此策略,您也不需要两个单独的php