我有一个通用的 PHP 维护脚本,它设置一个数据库值以防止与另一个实例同时运行。通常通过 cronjob 运行。
我清除了数据库值并尝试在关闭 cronjob 的情况下手动运行此脚本。每次我从浏览器运行它时,它都会立即终止,说明它已经在运行。
该脚本将作为后台进程运行大约 30 秒,然后自动终止,就像 PHP 检测到浏览器已关闭一样(大约需要 15 分钟才能完成)。
因此,我添加了代码以在设置或读取数据库值时回显。它在设置时从不回显,只有在读取时才会回显,但我可以看到每次都存储数据库值。
如果从 cron 运行,脚本总是按预期完成。
会发生什么?服务器可以在每个基于浏览器的请求上执行两次脚本吗?
服务器运行 Hive,因此不同的目录可以有不同的 PHP 版本。不知道这是否与它有关。
PHP 5.2.17 (default)
PHP 5.3.27 (dir this script is in)
Apache 2.2.25
指示它是否运行的代码就是这样的:
$DB = new DbConnector($db_name, $db_user, $db_pass);
if ($DB->queryOne("SELECT COUNT(*) FROM data_vars WHERE name = 'maintenance_running'")) {
exit('Already running!');
} else {
$DB->query("INSERT INTO data_vars (name, value) VALUES ('maintenance_running', 1)");
}
在脚本结束时,该值被清除。同样,此问题仅在从浏览器运行时发生。