Drupal für Admins: Drush

Vor einem Monat wurde Drush in Version 2.0 freigegeben. Für alle, die sich jetzt fragen, was drush ist: ein erstklassiges Drupal-Werkzeug für die Kommandozeile.

Und da ich einige Server mit Drupal-Websites betreibe, war ich schnell dabei, mir das Werkzeug mal anzusehen. Ein kleiner Urlaub brachte mir auch genug Arbeit nach der Rückkehr und erstklassige Anwendungsfälle.

Ich habe drush unter /usr/local/share installiert und ein paar Shell-Aliase definiert:

alias drush=/usr/local/share/drush/drush
alias bdrush='drush -r ~/html/d6/ -l http://beispiel.de'
alias edrush='drush -r ~/html/d6/ -l http://example.org'
alias ddrush='drush -r ~/html/d6/ -l http://demo.example.org'
alias pdrush='drush -r ~/html/d6/ -l http://projects.example.org'

Drupal ist im Verzeichnis ~/html/d6/ installiert. Die Parameter -r und -l helfen drush, die gwünschte Website zu finden.

Und dann ist die Installation eines Modules so einfach wie:

drush dl support       # herunterladen nach sites/all/modules/
drush enable support   # Aktivieren des Moduls

Das Update einer Website wird mit

drush update

erledigt. Und an das Datenbankprompt bringt mich

drush sql cli

Den Rest findet Ihr selbst heraus. 😉

Nun wollte ich auf einfach Weise den Cron-Lauf für alle Websites zentralisieren. Und habe mir mit einem knappen Mehrzeiler geholfen:

#!/bin/bash
#
# Script to run the cron task on all installed Drupal sites.
#
# (C) 2009 Dirk Ruediger <dirk@niebegeg.net>
#
# This script depends on an Drupal installation, shell access to the
# server and drush installed.
#
;
# Where is the drush script located on my disk
#
DRUSH=/usr/local/bin/drush
;
# Any custom options for drush
#
OPTS=
;
# A listing of installation directories for drupal sites.
# On a confixx managed host Drupal is installed in an html/ subfolder in
# the client's home folder. The home folders are in /var/www.
#
ROOTS='/var/www/web*/html';
for s in $(find $ROOTS -name settings.php)
do
  DIR=$(echo $s | sed 's@/sites/.*@@')
  SITE=$(echo $s | sed 's@.*/sites/\([^/]*\)/.*@\1@')
  if [ $SITE == 'default' ]
  then
      $DRUSH $OPTS  -r $DIR cron
  else
      $DRUSH $OPTS -r $DIR -l http://$SITE cron
  fi
done

Das Skript such in allen htdocs/-Verzeichnissen aller User eines onfixx-Hosts nach Drupal-Installationen und führt drush cron für alle Websites einer Installation aus. So macht Administration Spaß!