运行一个后台进程只有一次

Running a background process only once

我有一个要执行的进程(使用exec()),但我只想执行一次。我尝试使用全局变量,但效果不佳。这是我的:

if ($started = false) {
    $started = true;
    exec("php something.php");
}

我不希望它在我加载页面时只 运行 一次,但是一旦页面加载了一次并执行了该过程,此后它就永远不会执行了。那么,我该怎么做呢?

(我不确定这是否重要,但该过程包括一个 time_sleep_until,所以我认为在那之后我真的不能在那个页面上放一些东西或发回......)

您可以在进程执行之后或之前写入文件。下次加载脚本时,您可以检查该文件是否存在。

if (! file_exists('lockfile')) {
   file_put_contents('lockfile', '1');
   exec("php something.php");
}

您也可以创建内容为“0”的文件。如果它是“0”,你可以执行你的东西并将“1”写入文件。这样你就只能获得对该文件的特权(chmod)。

当然你也可以把那种状态持久化在MySQL, Redis, Mongo, ... 这只是一个人情选择。