Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在作业完成时安排PHP脚本(从CLI)_Php_Automation_Data Mining_Command Line Interface - Fatal编程技术网

如何在作业完成时安排PHP脚本(从CLI)

如何在作业完成时安排PHP脚本(从CLI),php,automation,data-mining,command-line-interface,Php,Automation,Data Mining,Command Line Interface,我正在使用PHP处理一个大的.gz文件(将数据从gz传输到mysql) 每个.gz文件大约需要10分钟。 我有很多.gz文件要处理 在PHP处理完一个文件后,我必须手动更改PHP脚本以选择另一个.gz文件,然后再次手动运行脚本 我希望它自动运行下一个作业来处理下一个文件。 gz文件名为1、2、3、4、5。。。 我可以简单地做一个类似这样的循环(流程文件1-5): 但是,由于gz文件非常大,我不能这样做,因为如果我使用这个循环,PHP将作为单个脚本作业运行多个大gz文件。(占用大量内存) 我想做的

我正在使用PHP处理一个大的.gz文件(将数据从gz传输到mysql) 每个.gz文件大约需要10分钟。 我有很多.gz文件要处理

在PHP处理完一个文件后,我必须手动更改PHP脚本以选择另一个.gz文件,然后再次手动运行脚本

我希望它自动运行下一个作业来处理下一个文件。 gz文件名为1、2、3、4、5。。。 我可以简单地做一个类似这样的循环(流程文件1-5):

但是,由于gz文件非常大,我不能这样做,因为如果我使用这个循环,PHP将作为单个脚本作业运行多个大gz文件。(占用大量内存)

我想做的是在PHP完成一个作业后,我想要一个新作业来处理下一个文件

也许会是这样的:

    $file = gzfile($_GET['filename'].'.gz')
    ...gz content processing...
谢谢你

你应该做的是

  • 安排一个cronjob,每x分钟运行一次php脚本
  • 当脚本运行时,检查是否有一个锁定文件,如果没有,则创建一个并开始处理下一个未处理的gz文件,如果是,则中止
  • 等待队列被清除
    • 你应该做的是

      • 安排一个cronjob,每x分钟运行一次php脚本
      • 当脚本运行时,检查是否有一个锁定文件,如果没有,则创建一个并开始处理下一个未处理的gz文件,如果是,则中止
      • 等待队列被清除

      如果您在处理后进行清理,并使用
      unset()
      释放所有内存,则只需将整个脚本包装在
      foreach(glob(…)as$filename)
      循环中即可。像这样:

      <?php
      foreach (glob(...) as $filename) {
          // your script code here
          unset($thisVar, $thatVar, ...);
      }
      ?>
      

      如果在处理后进行清理,并使用
      unset()
      释放所有内存,则只需将整个脚本包装在
      foreach(glob(…)as$filename)
      循环中即可。像这样:

      <?php
      foreach (glob(...) as $filename) {
          // your script code here
          unset($thisVar, $thatVar, ...);
      }
      ?>
      

      您应该从shell脚本调用带有参数的PHP脚本。下面是如何在PHP中使用命令行参数的文档

      或者,我现在不能尝试,但是在处理gzip之后,您可以给一个取消设置($file)的机会

      for ($i = 1 ; $i >= 5; $i++)
      {
          $file = gzfile($i.'.gz')
          ...gz content processing...
          unset($file);
      }
      

      您应该从shell脚本调用带有参数的PHP脚本。下面是如何在PHP中使用命令行参数的文档

      或者,我现在不能尝试,但是在处理gzip之后,您可以给一个取消设置($file)的机会

      for ($i = 1 ; $i >= 5; $i++)
      {
          $file = gzfile($i.'.gz')
          ...gz content processing...
          unset($file);
      }
      

      可以为cron编写程序吗?我认为cron只使用时间间隔安排作业。如何编写脚本?使用信号量而不是单个周期设置cron作业是非常奇怪和无效的。@ern0:请随意详细说明您的语句。cron旨在在指定时间内重复某些内容。它需要“技巧”(信号量避免溢出)来连续地做一些事情。这是一个过载。有更简单的解决方案。有可能为cron编写程序吗?我认为cron只使用时间间隔安排作业。如何编写脚本?使用信号量而不是单个周期设置cron作业是非常奇怪和无效的。@ern0:请随意详细说明您的语句。cron旨在在指定时间内重复某些内容。它需要“技巧”(信号量避免溢出)来连续地做一些事情。这是一个过载。还有更简单的解决方案。谢谢,该方法类似于@ern0方法。我从你那里学到了glob()函数。它可能对我有用。谢谢,该方法类似于@ern0方法。我从你那里学到了glob()函数。它可能对我有用。谢谢