我有一个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";
任何人都知道为什么会这样?
答案 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
。