Se o usuário executando o comando crontab
for vagrant
e o diretório no qual a saída é gravada for de propriedade de root
e tiver permissões 755
, ele não poderá ser gravado. sudo chown vagrant /var/backup/all
pode consertar isso.
Para verificar se esse é o problema, tente gravar em um arquivo em /tmp
.
Mas há outro problema: um comando como mysqldump mydb | gzip > database.sql.gz >/dev/null 2>&1
grava o dump do banco de dados para database.sql.gz
e para /dev/null
.
O 2>&1
copia as mensagens de erro para a saída padrão, o que significa que também grava as mensagens de erro em database.sql.gz
. Ele escreve o texto da mensagem de erro apenas em algum lugar entre os dados compactados, portanto, o arquivo compactado será quebrado. Observe que ele pode funcionar bem durante o teste - pois o problema ocorre apenas quando algo é gravado no fluxo de erro padrão. A saída para stderr pode ser apenas um aviso, enquanto todo o resto funciona.
Suponho que você pretende gravar o despejo de banco de dados compactado no arquivo sql.gz e os erros em /dev/null
. Para isso, apenas mantenha os fluxos de saída separados, não copiando o fluxo de erro para o fluxo de saída. E direcione-os para os arquivos assim:
mysqldump mydb | gzip > /var/backup/all/database_'date +%Y-%m-%d'.sql.gz 2>/dev/null
A mensagem de erro "(Nenhum MTA instalado, descartando a saída)" é o cron informando que ele não pode enviar a saída de erro. Isso não será problema no final, como você redirecionar os erros para /dev/null
de qualquer maneira, não haverá nada para enviar. Mas eu suspeito que atualmente existem mensagens de erro para enviar, que devem confirmar minhas descobertas acima.