Mit ‘cron’ getaggte Artikel

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. :-)