捕获命令行输入,如果输入= x;其他继续



我有一个运行数天的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/

最新更新