Os comandos do Crontab terão todas as ocorrências sem escape de %
substituídas por novas linhas. Isto é de o manual crontab(5)
no meu sistema:
The command field (the rest of the line) is the command to be run. The entire command portion of the line, up to a newline or
%
character, will be executed by/bin/sh
or by the shell specified in theSHELL
variable of the crontab. Percent signs (%
) in the command, unless escaped with a backslash (\
), will be changed into newline characters, and all data after the first%
will be sent to the command as standard input.
Seu comando crontab deve se parecer com
mysql -N -ubackup -pt -e 'show databases' | while read dbname; do mysqldump -ubackup -p123 --complete-insert -N "$dbname" > /home/test/sqlbackups/"$(date +"\%Y-\%m-\%d")-$dbname".sql;done
Aqui, eu também corrigi o $(...)
que estava com aspas simples (e, portanto, não expandido pelo shell).
Em geral, é melhor colocar todos os cron jobs não triviais em seus próprios scripts e, em seguida, programá-los. Dessa forma, você tem mais controle sobre coisas como essa e também é capaz de escolher o intérprete correto para qualquer tarefa específica (por exemplo, ksh
ou bash
em vez de sh
). Além disso, qualquer linha de assunto nos e-mails enviados para você a partir do daemon do cron é mais legível.