我有一个运行数天的CLI脚本。它处理批处理,每个批处理大约需要7分钟。有时我需要停止脚本,但是我只需要在处理批处理后才停止它,这是我投入的2秒睡眠。如果有任何办法可以在脚本执行的任何阶段获取输入,如果该输入= x,然后在下一批末尾停止脚本;否则继续。
我遇到了:
$handle = fopen ("php://stdin","r");
$line = fgets($handle);
但这需要输入。
我认为您不会按照自己的思考方式获得它。您可以捕获StdOut
,但我认为在停止脚本方面对您不利。如果我一直在CLI上使用它,并且一直在运行,但是我想暂停它一定时间,您可以做很多事情,但这可能就是我以" Quick Fix" 。
重组您的PHP代码很小,如果尚未将批处理过程放入函数中。然后,您可以使用while
创建一个无限环路。然后,我会检查每个批处理过程后是否存在暂停文件。如果文件存在,则不要启动下一个批次。基本上暂停了它。如果不存在,则正常进行。
例如。
您的php文件看起来像这个小示例。
<?php
//path to pause file
$filename = "/root/pause";
while(1){
if(!file_exists($filename)){
batch();
}
}
function batch(){
//batch processing
echo "batchingn";
//fake processing using a usleep pause
usleep(3000000);
}
?>
然后,当您要暂停脚本时。只需创建文件pause
即可完成当前处理时,它将停止。
因此,要在Linux上创建文件,请在脚本中的目录中CD并运行命令
touch pause
,也可以使用touch /path/to/pause
这样的完整路径。只需确保它与脚本中的目录相同。完成后,只需删除文件rm -f pause
,然后恢复处理批处理。
请注意,当它暂停并且只是在循环而不是处理时,它可能会导致CPU使用率有所增加,但是应该可以。
长期您可以查看这个小示例,以使您朝这个方向前进。http://www.phpmysqlitorials.com/2013/05/08/php-standard-input-anp--input-and-loops-on-the-command-line/