我正在运行一个扫描'扫描'一个目录,每60秒一次,直到找到具有给定名称的文件:
<?php
do {
if (file_exists("../path/file.txt)) {
//Do Stuff
$status = "File Found";
echo $status;
} else {
$status = "File Not Found";
sleep(60);
}
} while ($status == "File Not Found");
?>
在此示例中,删除sleep()
是否需要更多服务器资源?
谢谢,
答案 0 :(得分:3)
简而言之,是的,但不要担心。
当sleep
正在执行时,脚本的CPU处理几乎停止。所以,是的,它将减轻处理资源。 (脚本仍然在内存中,因此仍然使用这些资源,但这在现代机器上应该不是问题。)
如果您的目标是每60秒执行一次,最佳做法是将您的PHP设为 cron脚本,并以低优先级运行。
nano crontab -e
添加以下内容:
* * * * * /usr/bin/nice -n 12 php -q /path/file.php
将/path/file.php
替换为PHP脚本的完整路径。
编辑脚本的文件权限以允许执行。
chmod ug+rwx /path/file.php
(再次用您实际的PHP脚本的完整路径替换/path/file.php
。)
最后,如果您打算以这种方式运行,最好在PHP脚本中使用前2行:
#!/usr/bin/php5
<?php
答案 1 :(得分:1)
是的,每个指令运行都会花费资源,无论是注册空间,内存还是磁盘IO。
在这种情况下,请勿删除mysite.com/index.php
- 不经常休息的轮询是不必要地粉碎资源的好方法。
在这种情况下,在文件出现之前,您将像在条件检查sleep()
上浪费处理器周期和可能的某些磁盘IO一样循环。
通过在循环之间等待一分钟,可以大大降低成本,以及 as-fast-as-you-can-can 条件检查。