我有一个PHP脚本,用于检查目录并删除15秒内未修改的任何文件(这是游戏)。
我的问题是如何让这个脚本一直运行。我设置了一个每10分钟运行一次的cron作业,然后在PHP脚本中我有一个无限循环的睡眠(10)。我的想法是它会每10秒运行一次代码,如果脚本停止,cron作业最终会重新启动它。
然而,在脚本启动后,它会运行大约3个循环(30秒)然后停止。我听说PHP每个文件加载只能获得如此多的内存。
如何让这个PHP脚本无限循环?也许有一些方法可以自称
答案 0 :(得分:4)
您可以运行一个父PHP进程,该进程以一定间隔分叉客户端。如果你对将它作为一个选项进行探索感到好奇,这是一个很好的起点:http://ca2.php.net/pcntl这样做的好处是父进程可以杀死在合理的时间内没有结束的客户端pid。
如果你正在寻找快速和肮脏的东西,你可以写一个bash脚本来轻松调用php(如果你在Linux上):
#!/bin/bash
while [ "true" ]; do
/path/to/script.php
sleep 15
done
修改的 你甚至不需要脚本,bash会在一行上完成所有操作:
while [ "true" ]; do /path/to/script.php; sleep 15; done
答案 1 :(得分:2)
您可能想要检查php.ini文件中的max_execution_time参数。我相信默认值是30秒。你使用cron设置它的方式,你可能会在10分钟后运行多个脚本实例,除非你在脚本中添加一些逻辑来检查它自己的实例是否还没有运行
答案 2 :(得分:2)
确保编译PHP可执行文件以用作命令行解释器,而不是CGI可执行文件。 PHP通常会杀死运行时间超过max_execution_time
的脚本(默认为30秒)。但是,CLI可执行文件不会强加此限制。
More info about CLI vs. CGI SAPIs.
您可以使用--version
参数检查可执行文件的SAPI:
$ php --version
PHP 4.3.0 (cli), Copyright (c) 1997-2002 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2002 Zend Technologies
答案 3 :(得分:1)
PHP作为一种语言不能无限期地运行。 由于你每十分钟就有一个cron-job,为什么不执行你的任务60次然后退出?
此外,PHP在大多数Linux服务器上都有不同的CLI配置文件和apache模式。 所以检查你的etc / php / cli / php.ini并检查最大执行时间和内存限制可能是明智的。
答案 4 :(得分:0)
每隔一段时间(在内存不足之前)就会突破循环并重新执行 exec(“/ usr / bin / php”。 FILE );
答案 5 :(得分:0)
有一个PEAR module用于编写长时间运行的PHP脚本。我自己没用过它。