AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1454389
Accepted
Flimm
Flimm
Asked: 2023-02-11 08:32:47 +0800 CST2023-02-11 08:32:47 +0800 CST 2023-02-11 08:32:47 +0800 CST

Para onde vai a saída do cron do usuário por padrão no Ubuntu?

  • 772

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.

cron
  • 2 2 respostas
  • 56 Views

2 respostas

  • Voted
  1. Artur Meinild
    2023-02-11T10:17:30+08:002023-02-11T10:17:30+08:00

    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 MAILTOvariável. Então, no seu crontab, defina:

    [email protected]
    

    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:

    MAILTO=""
    

    Isso seria como você controla o comportamento padrão.

    • 2
  2. Best Answer
    Flimm
    2023-02-15T00:09:23+08:002023-02-15T00:09:23+08:00

    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 comandosendmail

    Para enviar um e-mail, o cron simplesmente executa o comando sendmail, assim:

    /usr/sbin/sendmail -FCronDaemon -i -B8BITMIME -oem "$MAILTO"
    

    (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, LOGNAMEa variável de ambiente será usada. Cron é definido LOGNAMEcomo o nome de usuário do usuário do Linux. De man 5 crontab:

    Várias variáveis ​​de ambiente são configuradas automaticamente pelo daemon cron(8). SHELLestá definido como /bin/sh, e LOGNAMEe HOMEsão definidos a partir da /etc/passwdlinha do proprietário do crontab. PATHé herdado do ambiente. HOME, SHELL, e PATHpode ser substituído por configurações no crontab; LOGNAMEé o usuário do qual a tarefa está sendo executada e não pode ser alterado.

    Além de LOGNAME, HOME, e SHELL, o cron(8) examinará MAILTOe MAILFROMse houver algum motivo para enviar e-mail como resultado da execução de comandos neste crontab.

    Se MAILTO for definido (e não estiver vazio), o e-mail será enviado ao usuário assim nomeado. MAILTOtambém pode ser usado para enviar mala direta a vários destinatários, separando os usuários destinatários com uma vírgula. Se MAILTOestiver definido, mas vazio ( MAILTO=""), nenhum e-mail será enviado. Caso contrário, o e-mail é enviado ao proprietário do crontab.

    Se MAILFROMfor definido, o endereço de e-mail do remetente será definido como MAILFROM. Caso contrário, o e-mail é enviado como "root (Cron Daemon)".

    Por padrão, o Ubuntu não vem com o comando sendmailinstalado. Nesse caso, você notará nos logs este erro:

    Feb 10 17:27:01 desktop-ubuntu CRON[36079]: (CRON) info (No MTA installed, discarding output)
    

    Vários pacotes diferentes fornecem um sendmailcomando no Ubuntu. Um que é frequentemente recomendado é o postfix:

    $ sudo apt install 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 sendmailpara ser compatível com outros pacotes como o cron que esperam que um sendmailcomando seja encontrado. Outros pacotes que também instalam sendmailsão:

    $ apt-file search -F /usr/sbin/sendmail
    courier-mta: /usr/sbin/sendmail           
    dma: /usr/sbin/sendmail
    esmtp-run: /usr/sbin/sendmail
    exim4-daemon-heavy: /usr/sbin/sendmail
    exim4-daemon-light: /usr/sbin/sendmail
    lsb-invalid-mta: /usr/sbin/sendmail
    masqmail: /usr/sbin/sendmail
    msmtp-mta: /usr/sbin/sendmail
    nullmailer: /usr/sbin/sendmail
    opensmtpd: /usr/sbin/sendmail
    postfix: /usr/sbin/sendmail
    ssmtp: /usr/sbin/sendmail
    

    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 job echo hi:

    $ less /var/mail/$USER
    From flimm@desktop-ubuntu  Tue Feb 14 08:54:01 2023
    Return-Path: <flimm@desktop-ubuntu>
    X-Original-To: flimm
    Delivered-To: flimm@desktop-ubuntu
    Received: by desktop-ubuntu (Postfix, from userid 1000)
            id 9C7137E12E4; Tue, 14 Feb 2023 08:54:01 +0100 (CET)
    From: root@desktop-ubuntu (Cron Daemon)
    To: flimm@desktop-ubuntu
    Subject: Cron <flimm@desktop-ubuntu> echo hi
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    X-Cron-Env: <SHELL=/bin/sh>
    X-Cron-Env: <HOME=/home/flimm>
    X-Cron-Env: <LOGNAME=flimm>
    Message-Id: <20230214075401.9C7137E12E4@desktop-ubuntu>
    Date: Tue, 14 Feb 2023 08:54:01 +0100 (CET)
    
    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:

    • De onde vêm os e-mails, afinal? por Christoph Mewes
    • página man crontab(5) (para o formato do arquivo)
    • página man crontab(1) (para o comando)
    • 0

relate perguntas

  • Como configuro um trabalho Cron?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve