运行一个后台进程只有一次
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, ... 这只是一个人情选择。
我有一个要执行的进程(使用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, ... 这只是一个人情选择。