erro crontab com (nenhum MTA instalado) mas eu uso / dev / null 2 & 1

6

Sou novo no usuário linux

Eu tento executar o crontab para fazer backup do meu banco de dados com o usuário vagante

* * * * * /usr/bin/mysqldump -h localhost -u root -p root mydb | gzip > /var/backup/all/database_'date +%Y-%m-%d'.sql.gz >/dev/null 2>&1

quando o crontab é executado, não há arquivo de backup na pasta (meu backup / all tem o esquema de permissão 755 ).

Isso é um erro de /var/log/syslog

Aug 16 11:55:01 precise64 CRON[2213]: (vagrant) CMD (/usr/bin/mysqldump -h localhost -u root -p root mydb | gzip > /var/backup/all/database_'date +%Y-%m-%d'.sql.gz >/dev/null 2>&1)
Aug 16 11:55:01 precise64 CRON[2212]: (CRON) info (No MTA installed, discarding output)

Então eu acho que

  1. é sobre crontab não pode criar arquivo de backup por causa da permissão negada.
  2. é sobre eu não instalar o MTA, mas eu uso >/dev/null 2>&1 para desabilitar o crontab para enviá-lo para e-mail por que erro?
por Kanin Peanviriyakulkit 16.08.2014 / 17:26

3 respostas

10

Claro, o erro é que você não tem um mailer (sendmail, postfix, etc) implementado e ativo.

Dito isso, seu outro problema é que o > / dev / null 2 > & 1 SOMENTE se aplica / associa ao comando LAST neste caso gzip. Portanto, deve haver algum tipo de saída indo para o STDERR para o seu mysqldump.

A maneira correta de fazer o que eu quero é:

 * * * * *  (command | command ) >/dev/null 2>&1
    
por 16.08.2014 / 20:20
3

Você pode colocar:

MAILTO=""

no início do seu arquivo crontab e isso evitará que ele tente enviar um email.

    
por 21.05.2016 / 05:30
1

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.

    
por 16.08.2014 / 23:12