Prozentzeichen (%) in CronJobs

von Khark am 10. Dezember 2009 um 19:47 Uhr

Peinlich. Peinlich.
Da arbeitet man jahrelang* als Linuxadmin und dann sowas..

Aber der Reihe nach. Die Aufgabe war einfach, jeden Tag um 02:00 Uhr soll ein Backup aller MySQL-Datenbanken gemacht, mit bzip2 komprimiert und unter /media/backup/mysql-dbs.YYMMTT.bz2 abgelegt werden.

Lösen tut man das dann wie folgt:
00 2 * * * root mysqldump --all-databases --user=root --password=xxxxx |bzip2 > /media/backup/mysql-dbs.$(date +%y%m%d).bz2

Dieses ergibt aber nur eine tolle Fehlermail von Cron:

/bin/bash: -c: line 0: unexpected EOF while looking for matching `)’
/bin/bash: -c: line 1: syntax error: unexpected end of file

Das Problem ist, das Cron das Prozentzeichen (%) als NewLine interpretiert.
Daher muss es escaped werden, damit man es als Bestandteil eines Kommandos, z.B. bei date, verwenden kann.
Leider steht dies nicht in jeder Manpage. (Bei Debian steht es drin -> man 5 crontab)

Richtig ist also folgendes:
00 2 * * * root mysqldump --all-databases --user=root --password=xxxxx |bzip2 > /media/backup/mysql-dbs.$(date +\%y\%m\%d).bz2

* = Ich zähl die Ausbildung jetzt einfach mal dazu. :-)

Tags: ,

3 Antworten zu “Prozentzeichen (%) in CronJobs”

  1. buliwyf sagt:

    Für solche Fälle empfehle ich immer automysqlbackup.
    Zu finden bei sourceforge http://sourceforge.net/projects/automysqlbackup/
    Dies regelt die Sache sehr schön.

  2. Ich habe mir angewöhnt für solche Sachen, die in der Crontab eher für Chaos sorgen und der Übersichtlichtkeit nicht gerade hilfreich sind, Skripte zu schreiben.

    Denn früher oder später willst Du vor oder nach dem Dump noch etwas anderes machen und spätestens dann wirds in der Crontab sehr sehr hässlich.

    Desweiteren solltest Du Dir unbedingt maatkit anschauen, im speziellen mk-parallel-dump:

    http://www.maatkit.org/
    http://www.maatkit.org/doc/mk-parallel-dump.html

    Wenn Du einmal mit maatkit gearbeitet hast, willst Du nie wieder mit mysqldump rumhantieren müssen (zumal das “parallel” dort im Namen nicht nur zum Spaß steht :)

    Gruß,
    Marcel.

  3. Emzy sagt:

    Ja, das Problem hatte ich auch mal.

    Hat etwas gedauert bis ich drauf gekommen bin.

    Wie sagt man doch: “Man lernt nie aus”

    Gruß Emzy