Se eu executar crontab -e
, o Ubuntu me mostrará esta tarefa cron padrão para o usuário atual:
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
Observe a parte que diz isso:
A saída dos trabalhos crontab (incluindo erros) é enviada por e-mail para o usuário ao qual o arquivo crontab pertence (a menos que seja redirecionado).
Como vejo essa saída? Qual e-mail está associado ao meu usuário do Linux?
Se eu olhar para grep CRON /var/log/syslog
, vejo linhas como esta:
Feb 10 17:27:01 desktop-ubuntu CRON[36079]: (CRON) info (No MTA installed, discarding output)
Presumo que MTA significa Agente de Transferência de Correio. Parece que a saída é jogada fora.
Pessoalmente, gostaria que a saída fosse salva em algum lugar sem ir para um endereço de e-mail real na Internet. Mas minha pergunta é mais sobre entender o comportamento padrão.
Para que o cron envie e-mails, você precisa ter o postfix ou outro MTA (agente de transferência de e-mail) instalado.
Se nenhum endereço de e-mail específico for definido, o e-mail será entregue aos endereços de e-mail do usuário interno em
/var/mail/<username>
.Você também pode especificar um endereço de e-mail externo para o qual o cron envia com a
MAILTO
variável. Então, no seu crontab, defina:Em seguida, o cron enviará e-mails para esse endereço.
Se você deseja desabilitar o envio de e-mail do cron, no crontab defina:
Isso seria como você controla o comportamento padrão.
Gostei da resposta do @Artur Meinild e queria me aprofundar um pouco mais, porque queria muito entender como isso funciona. Dei uma olhada no código-fonte do cron enviado pelo Ubuntu, habilitando os repositórios de código-fonte e executando
apt-get source cron
. Aqui está o que eu aprendi:cron apenas usa o comando
sendmail
Para enviar um e-mail, o cron simplesmente executa o comando
sendmail
, assim:(os argumentos exatos da linha de comando podem diferir, mas essa é a essência)
MAILTO
é uma variável de ambiente que pode ser definida no crontab. Se não estiver definido,LOGNAME
a variável de ambiente será usada. Cron é definidoLOGNAME
como o nome de usuário do usuário do Linux. Deman 5 crontab
:Por padrão, o Ubuntu não vem com o comando
sendmail
instalado. Nesse caso, você notará nos logs este erro:Vários pacotes diferentes fornecem um
sendmail
comando no Ubuntu. Um que é frequentemente recomendado é o postfix:(Quando solicitado na instalação, escolhi a opção "Somente local", pois não estava interessado em enviar e-mail pela Internet.)
O Postfix instala um comando
sendmail
para ser compatível com outros pacotes como o cron que esperam que umsendmail
comando seja encontrado. Outros pacotes que também instalamsendmail
são:Parece que se o postfix for instalado com a configuração "local only", então o e-mail enviado para um Linux é armazenado neste local
/var/mail/<username>
. Aqui está um exemplo de conteúdo deste arquivo após a execução de um cron jobecho hi
:Se preferir, você pode usar um cliente de e-mail como mutt (na linha de comando) ou Thunderbird ( com uma GUI ) para visualizar esses e-mails armazenados neste local.
Referências: