我们做的Drupal网站数据量都比较大,几年前一开始就遇到cron运行报错的情况,主要就是因为cron运行期间要生成xmlsitemap,遇到php的内存限制或者运行时间限制导致出错无法正常执行,我们当时采取的办法是修改“Minimum sitemap lifetime(sitemap最小存在时间)”为10年(drush vset xmlsitemap_minimum_lifetime "315360000",并且还要修改modules/xmlsitemap/xmlsitemap.admin.inc中的内容,增加10年这个表单选项),这样10年内让cron碰不到需要重新生成sitemap的情况,从而来禁止cron运行期间生成xmlsitemap(具体见《Drupal网站中不让Cron自动更新Boost_Cache及XML_Sitemap》),这样修改后,cron就可以正常运行。此后的sitemap.xml的重新生成都是通过drush命令来进行的,因为需要占用大量内存、运行很长时间,所以都是大约几个月或者几年才重新生成一次。
最近Drupal 6升级到Drupal 7以及Drupal 7本身的升级中,看到xmlsitemap这个第三方模块也有升级,其中的高级设置多了一个选项:Disable cron generation of sitemap files.(禁止cron生成sitemap文件)后面有说明:This can be disabled if other methods are being used to generate the sitemap files, like drush xmlsitemap-regenerate.我们本来就是用drush xmlsitemap-regenerate来生成sitemap.xml的,这个设置正好为我所用,不需要修改xmlsitemap_minimum_lifetime为10年以及修改modules/xmlsitemap/xmlsitemap.admin.inc中的内容这种不是很正规的办法了。批量设置的时候,运行一句drush vset xmlsitemap_disable_cron_regeneration 1 就可以。
另外,数据量超过几十万、上百万的时候,需要很大内存来生成xmlsitemap,以前是直接修改apache配套的php的配置文件php.ini,生成sitemap后再还原php.ini,今天找到一个办法,在/root/.drush下新建一个文件drush.ini,里面放
memory_limit = 8192M max_execution_time = 3600
就可以把内存限制设置为8G、最长执行时间设置为3600秒等。
还有,我们以前的多语言、手机版网站的网站地图,是通过修改修改sites/all/modules/xmlsitemap/xmlsitemap.page.inc来进行的,具体见《Drupal网站多语言版的站点地图自动转换》、《Drupal网站手机版的站点地图Mobile XML Sitemap》,现在启用responsive_bartik后的网站就不存在专门的手机版了,但如果还有多语言版本,依然要向以前那样修改xmlsitemap模块的文件。
评论