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ückkehr1 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ß!

1 Wer ist nicht genervt, wenn im Drei-Tage-Takt irgend ein Modul bei irgendeiner Installation eine Sicherheitsaktualisierung benötigt, man das tar.gz-Paket herunterlädt, auspackt, das FTP-Programm anwirft und die Dateien auf den Webserver zu laden und anschließend noch update.php auszuführen. Und immer in kleinen Chargen, um dem White screen of death wegen eines zu knapp bemessenen _memory_limit_ auszuweichen…

Das ist wirlich eine der besten Drupal Erweiterungen für den Dev wie es scheint. Ich will es unbedingt mal testen, wenn ich mich weiter mit der Komandozeile auseindergesetzt habe (bin dummer Mac User :)

Was ich bisher nicht finden konnte:

Kann Drush auch Module Updaten? Also direkt von Drupal.org auf den Server laden? oder muss man dafür selber CURL nutzen?

Klar kann es das :-)

Die gesamte Installation wird mit

drush update

aktualisiert, ein einzelnes Modul (z.B. print.module) mit

drush update print

Drush aktualisiert bei jedem Aufruf die Versionsinfos und fragt vor dem Update, ob es wirklich durchgeführt werden soll. Dann wird heruntergeladen (vorhandener Sourcecode in ein Backup-Verzeichnis verschoben), ausgepackt und die DB aktualisiert. Ein-Klick-Update ;)

Drush rockt!

D.
--
Always borrow money from a pessimist; he doesn't expect to be paid back.

wow, das ist echt superpraktisch.