Jan 132013
 

Si vos sites ne sont pas parcourus régulièrement, les pages ne seront plus dans votre cache varnish, vous pourriez augmenter le ttl de vos pages mais si vous mettez à jour régulièrement vos sites cela peut être embêtant.
La solution, créer un cron qui parcours votre site avec ce script :

#!/bin/bash
 
Sitemap='www.exemple.com/sitemap.xml'
Site='www.exemple.com'
wget='/usr/bin/wget'
grep='/bin/grep'
awk='/usr/bin/awk'
find='/usr/bin/find'
mount='/bin/mount'
umount='/bin/umount'
sed='/bin/sed'
wc='/usr/bin/wc'
cut='/usr/bin/cut'
 
if [ `$mount -l | $grep /tmp/wget | $wc -l` -gt 0 ] ; then exit 1 ; fi
 
touch /tmp/cookies.txt
$wget -q -O /dev/null "URL pour régénérer le sitemap"
 
if [ ! -d /tmp/wget ] ; then
   mkdir /tmp/wget
fi
 
$mount -t tmpfs -o size=25M tmpfs /tmp/wget
cd /tmp/wget
 
for site in $Sitemap ; do
   for url in `$wget -q -O - "http://$site" | $grep '<loc>'  | $awk -F'<loc>' '{print $2}' | $awk -F'</loc>' '{print $1}'` ; do
      $wget -q -p --save-cookies /tmp/cookies.txt --load-cookies /tmp/cookies.txt "$url"
      for index in `$find . -type f | $sed 's:^./::' | $grep index.html` ; do
            for href in `$grep href "$index" | $cut -d"'" -f2 | $cut -d'"' -f2 | $grep http | $grep "$Site"` ; do
                  $wget -q -p --save-cookies /tmp/cookies.txt --load-cookies /tmp/cookies.txt --header='Accept-Encoding: gzip, deflate' "$href"
                  $wget -q -p --header='Accept-Encoding: gzip, deflate' "$href"
            done
      done
      for file in `$find . -type f | $sed 's:^./::' | $grep -v index.html` ; do
          $wget -q -O /dev/null  --save-cookies /tmp/cookies.txt --load-cookies /tmp/cookies.txt --header='Accept-Encoding: gzip, deflate' "http://$file"
          $wget -q -O /dev/null  --header='Accept-Encoding: gzip, deflate' "http://$file"
      done
      for file in `$find . -type f | $sed 's:^./::' | $grep index.html | $sed 's:index.html::'` ; do
          $wget -q -O /dev/null  --save-cookies /tmp/cookies.txt --load-cookies /tmp/cookies.txt --header='Accept-Encoding: gzip, deflate' "http://$file"
          $wget -q -O /dev/null  --header='Accept-Encoding: gzip, deflate' "http://$file"
      done
      rm -rf /tmp/wget/*
   done
done
rm /tmp/cookies.txt
cd /tmp/ ; $umount /tmp/wget ; rm -rf /tmp/wget

Maj 13/01/12 : Ajout href

  4 Responses to “Charger vos sites dans le cache Varnish avec le sitemap (crawler)”

  1. Merci pour ce script, je vais le tester.
    Je viens de me mettre à varnish et je cherchais une sorte de crawler, comme j’avais l’habitude avec le module Boost de Drupal.

    Je ne pensais pas à mon sitemap.xml, que d’ailleurs je n’avais d’ailleurs jamais regardé.
    C’est fait pour ça quand même !
    Je vais le cronner une fois par jour, j’ai mis un TTL à 1 jour.
    Pour l’instant il y a environ 7000 url dans mon sitemap.
    C’est la bon réglage selon toi ?

    Sébastien Lucas
    http://www.archiref.com

    • Le TTL dépend de ton site et de la fréquence de sa mise à jour.
      Personnellement je fais crawler mon site plus vite que mon ttl pour remettre mon site en cache plus rapidement (fréquence 5min, TTL 1h)

  2. Sorry it don’t work for me.
    The script quit early
    I don’t understand how you fill $sitemap variable with sitemap content.

    for site in $Sitemap ; do

    Neither do I understand this line
    $wget -q -O /dev/null « url to regenerate sitemap »

    Other problem for me my sitemap is split in several pages
    so I would need several site map url like
    http://www.archiref.com/fr/sitemap.xml?page=1

    Thanks

    • Au début du script remplacer

      Sitemap='www.exemple.com/sitemap.xml'

      par (Sans le http://)

      Sitemap='www.archiref.com/fr/sitemap.xml?page=1 www.archiref.com/fr/sitemap.xml?page=2'
      

      $wget -q -O /dev/null “url to regenerate sitemap” sert si vous avez un script qui régénère le sitemap si il est statique.
      Vous pouvez désactiver cette ligne, car le votre est dynamique.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(required)

(required)

Spam protection by WP Captcha-Free