繁体   English   中英

在后台运行大型PHP脚本作为cron作业以避免503错误

[英]Running large PHP script as cron job in background to avoid 503 error

我有一个PHP脚本editxml.php ,它使用几个foreach循环结合了一系列XML文件。 它可以处理4个或5个文件,但如果我尝试20个文件,则服务器超时,并且收到503错误。 该脚本输出一个XML文件,该文件保存在同一目录中,但是在浏览器中不需要显示任何内容。 如何在后台运行它直到完成?

$fileout = 'output.xml';
$dst = simplexml_load_file( 'template.xml' );
$dst = dom_import_simplexml( $dst )->ownerDocument;
$parent = $dst->getElementsByTagName( 'root' )->item(0);

$files = array(
"1.xml", // desc
"2.xml", // desc
"3.xml", // desc
"4.xml", // desc
"5.xml", // desc
"6.xml", // desc


);  

foreach ($files as $xml) {

$src = simplexml_load_file($xml);

    foreach( $src->product as $product )
  {
      $node = dom_import_simplexml( $product );
      $node = $dst->importNode( $node, 1 );
      $parent->appendChild( $node );
  }
}

$final = new DOMDocument();
$final->loadXML( $dst->saveXML(), LIBXML_NOBLANKS );
$final->formatOutput = True;
echo $final->saveXML();
$fh = fopen( $fileout, 'w') or die ( "can't open file $fileout" );
fwrite( $fh, $final->saveXML() );
fclose( $fh );

我正在使用带有serverpilot的digitalocean ubuntu 14.04 Droplet,但是任何需要shell / bash或远程ssh或PATH更改的操作对我来说都是极其困难的,因此,如果可能的话,我想避免这种情况。 我知道路径,但是远程连接PHP和Shell等不是我的强项。

* 15 * * * /opt/sp/php5.6/bin/php -f /path/to/trigger.php > /dev/null 2>&1

将运行cron作业的trigger.php触发文件editxml.php文件保存脚本在后台运行? 内部trigger.php是: exec("/path/to/editxmltest.php > /dev/null &");

看来您的服务器执行超时。 通过在代码顶部添加以下代码来增加执行时间

set_time_limit(0);

您还可以在php.ini上增加( 请参阅

ini_set('max_execution_time', 300); //300 seconds = 5 minutes

请检查以下主题以获取最佳做法,

将PHP脚本作为cron作业运行-超时问题?

有关此subreddit线程修复的更多信息: https : //www.reddit.com/r/PHPhelp/comments/4a9l48/best_practices_for_running_a_large_php_script_in/

我最终以登录用户的身份从命令行手动运行它,我担心稍后会自动执行该过程,但PHP进程成功完成并将文件输出到正确的目录。 我使用的命令是

nohup php -q /path/to/test.php > /path/to/process_log.xml 2>&1 &

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM