如何在作业完成时安排PHP脚本(从CLI)
我正在使用PHP处理一个大的.gz文件(将数据从gz传输到mysql) 每个.gz文件大约需要10分钟。 我有很多.gz文件要处理 在PHP处理完一个文件后,我必须手动更改PHP脚本以选择另一个.gz文件,然后再次手动运行脚本 我希望它自动运行下一个作业来处理下一个文件。 gz文件名为1、2、3、4、5。。。 我可以简单地做一个类似这样的循环(流程文件1-5): 但是,由于gz文件非常大,我不能这样做,因为如果我使用这个循环,PHP将作为单个脚本作业运行多个大gz文件。(占用大量内存) 我想做的是在PHP完成一个作业后,我想要一个新作业来处理下一个文件 也许会是这样的:如何在作业完成时安排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文件。(占用大量内存) 我想做的
$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()函数。它可能对我有用。谢谢