Como fazer com que o crontab me envie um email com saída?


45

Como posso enviar um e-mail ao crontab com a saída de seus trabalhos? Eu tenho MAILTO=redacted@yahoo.com.auacima dos empregos, mas não funciona.

Sei que preciso usar algo como Postfix ou Sendmail, mas durante toda a minha vida não consigo descobrir como conseguir isso. Pesquisei e procurei um guia simples sobre a configuração do Postfix, mas todos eles são incrivelmente complicados e esperamos que você esteja configurando um servidor inteiro para enviar e receber email e conhecer todos os termos (como, um nome de domínio) para e-mails enviados?).

Tudo o que eu quero fazer é enviar um e-mail ao crontab. Por que isso é tão difícil?

Informação adicional:

Meu arquivo crontab fica assim:

MAILTO=redacted@yahoo.com.au
1 0 * * * ~/Desktop/toskymesh.sh
59 6 * * * ~/Desktop/tooptus.sh
0 3 * * * snapraid sync

Mais informações adicionais:

A saída de ps -ef | grep '[s]endmail'

root 6840 1370 0 10:26 ? 00:00:00 sendmail: MTA: accepting connections

Sei que o cron está funcionando, mas estou testando o comando mail de echo Test | mail -s Test redacted@yahoo.com.auqualquer maneira.


@shellter esqueceu de marcar você.
— Clonkex

Teste muito bom! Você deve incluir essas informações na sua pergunta original. Neste ponto, eu já consegui ajudar. Você está no caminho certo, mas "Por que é tão difícil" .... Desculpe ... isso seria porque o Linux / Unix é um sistema altamente configurável. Todo mundo tem seu próprio caso especial, para o qual a configuração deve ser alterada.
— shellter 14/10

Recebi sua resposta, mas eu gastaria horas nisso (provavelmente). Mais uma vez, procure aqui sendmail setup. Boa sorte!
— shellter

@shellter Acabei de perceber que há registros para mail. Em um deles, diz o seguinte: Diagnostic-Code: SMTP; 553 5.7.1 [BL21] Connections will not be accepted from [MyIPRedacted], because the ip is in Spamhaus's list; see http://postmaster.yahoo.com/550-bl23.htmlIsso significa que o comando está funcionando, mas o Yahoo está bloqueando o correio?
— Clonkex

além da minha nota de pagamento, mas essa é uma mensagem bastante explícita, então parece que sim. Como você provavelmente sabe, tente enviar de um IP diferente e veja se passa através de OU se a mensagem de erro é alterada. Você conhece http://webmasters.stackexchange.com? Eles provavelmente podem ajudá-lo melhor ou melhor ainda, chat.stackexchange.com/rooms/524/webmastersonde aparentemente todas as perguntas são bem-vindas (hum .. você pode precisar de mais representantes para entrar, está em algum outro site de troca de pilhas?) Boa sorte.
— shellter 14/10

Respostas:


33

No final, eu usei sSMTP. É muito, muito mais simples que um Postfixou outro sendmaile faz o trabalho lindamente.

Para referência futura, veja como usar o sSMTP com o Yahoo Mail (não se preocupe, é muito menos complexo do que parece):

  • Use o Synaptic para baixar o ssmtp. Alternativamente, você pode executar sudo apt-get install ssmtp.

  • Abra o arquivo de configuração em /etc/ssmtp/ssmtp.conf.

  • Faça a configuração ficar assim:

root=[yourRealEmail@yahoo.com.au]
mailhub=smtp.mail.yahoo.com:587
FromLineOverride=YES
UseSTARTTLS=YES
AuthUser=[yourRealEmail@yahoo.com.au]
AuthPass=[yourRealYahooPassword]
TLS_CA_File=~/cert.pem
  • Crie o arquivo cert.pem com o OpenSSL. Eu usei o comando openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 9999 -nodes(mais informações aqui ). Você pode colar o arquivo em qualquer lugar, mas eu o coloquei em ~ /. Onde quer que você o coloque, aponte a TLS_CA_File=linha no ssmtp.conf para o local correto.

  • Abra o arquivo /etc/ssmtp/revaliasese adicione a linha [yourPCUsername]:[yourRealEmail@yahoo.com.au]:smtp.mail.yahoo.com:587. Se você estiver executando como root, acho que você precisará adicionar outra linha substituindo seu nome por 'root'.

  • É isso aí, você está pronto para ir! Para testar, a maneira mais fácil (IMO) é criar um arquivo com o seguinte:

To: [yourRealEmail@yahoo.com.au]
From: "whateverYaWant" <[yourRealEmail@yahoo.com.au]>
Subject: Some Notifying Email
MIME-Version: 1.0
Content-Type: text/plain

Body of your email goes here! Hello world!
  • Salve e feche o arquivo e verifique se você não tem o sendmail real instalado, execute sendmail -V- ele deve dizer 'sSMTP'.
  • Por fim, execute cat fileWithEmailInIt.txt | sendmail -i -t, aguarde alguns segundos (10 a 30) e verifique seu e-mail!

Obviamente, substitua [yourRealEmail@yahoo.com.au]pelo seu email (sem os colchetes) e [yourRealYahooPassword]pela senha do Yahoo Mail (novamente, sem os colchetes).

Nota adicional: se você tiver problemas com o Gmail, tente a opção 1 desta resposta (obrigado a Ben Creasy por essas informações).


Lá. Isso terá que fazer. Passei muito tempo brincando com a formatação boba como ela é.
— Clonkex

Qual é o objetivo do arquivo .pem? Eu vejo este tutorial não inclui um: havetheknowhow.com/Configure-the-server/Install-ssmtp.html
— Richard

1
Para Gmail, eu corri para serverfault.com/questions/635139/... e teve que permitir o acesso de menos aplicações seguras
— Ben Creasy

2
Obrigado pela sugestão do sSMTP. O Ubuntu Wiki tem um guia útil (mas não use um endereço de e-mail hostnamecomo mostrado atualmente). Esta resposta sugere que você pode usar certificados de servidor padrão, mas descobri que não precisava de uma TLS_CA_File=linha para enviar via GMail.
— Mark Berry

2
@MattM. Não obsoleto, apenas não mantido. Deve ser totalmente bom para usar ssmtp em um ambiente não-produção :)
— Clonkex

15

Instale o Postfix. É mais complicado que a maioria dos outros pacotes, mas ainda não é complicado .

sudo apt-get install postfix

Selecione "Site da Internet" e aceite todos os padrões. Então, precisamos parar as conexões externas, transformando isso em um " cliente nulo ". Execute: sudoedit /etc/postfix/main.cfe encontre a inet_interfacesconfiguração (perto do fim) e altere-a para loopback-only, da seguinte forma:

inet_interfaces = loopback-only

E, finalmente, reinicie o Postfix com sudo /etc/init.d/postfix restart(recarregar não serve).

Agora você tem uma instalação do Postfix que não retransmitirá o email para máquinas externas, apenas aceitará conexões no 127.0.0.1 (e :: 1 para IPv6).


Em uma nota separada, suas linhas cron provavelmente não estão funcionando porque você está usando caminhos não relativos e caminhos com substituições do Bash em. shNão entende ~e pode não ter um PATHconjunto adequado . Então substitua-os por (estou apenas adivinhando os caminhos reais):

1 0 * * *   /home/clonkex/Desktop/toskymesh.sh
59 6 * * *  /home/clonkex/Desktop/tooptus.sh
0 3 * * *   /usr/bin/snapraid sync

E se seus scripts precisarem ser executados a partir de um diretório específico, verifique se eles estão cdno diretório certo. Não assuma que cronestará no lugar certo, como provavelmente não estará.


Obrigado, mas o Postfix é complicado, apenas porque parece não haver guias simples. De qualquer forma, consegui que funcionasse bem com o sSMTP, que faz exatamente o que eu preciso e é genuinamente simples (embora ainda tenha sido preciso muita adivinhação e adivinhação aleatória para fazê-lo funcionar). Eu quis dizer para deixar uma resposta, mas esqueceu - I realmente conseguiu destruir a minha instalação do sistema operacional tão logo que eu tenho que ir de novo totalmente Vou postar minha própria resposta :)
— Clonkex

E, na verdade, meus trabalhos cron funcionaram bem ~/Desktop/.
— Clonkex

2
Eu precisava inet_interfaces = localhost. apenas loopback me deupostfix: fatal: config variable inet_interfaces: host not found: loopback-only
— craq 28/06

3

Eu tive muita sorte com o exim4.

sudo apt-get install alpine exim4 mailutils eximon4 spf-tools-perl swaks

(alpine é apenas o cliente de email que eu gosto de usar)

Depois disso, eu corri

sudo dpkg-reconfigure exim4-config

e seguiu as instruções. Esta página: https://help.ubuntu.com/community/Exim4 também foi muito útil. Levei cerca de 10 minutos para funcionar.


1

Na página de manual do sSMTP: "Ele não faz alias, o que deve ser feito no agente do usuário ou no mailhub. Nem honra .forwards, que devem ser feitos no host de recebimento. Especialmente não é entregue aos pipelines. "

Portanto, se você deseja receber todas as mensagens enviadas para a raiz no seu e-mail extenal, é uma má idéia usar o sSMTP, porque ele não suporta aliases.

Em vez disso, você pode usar o postfix. Ainda é muito simples. Veja como usá-lo com o gmail como smtp para enviar mensagens:

sudo apt-get install postfix mailutils

Tipo geral de configuração de email: sistema de satélite

Nome do correio do sistema: o nome completo e preferido do servidor de correio, por exemplo, mail.example.com

Host de retransmissão SMTP (em branco para nenhum): [smtp.gmail.com]: 587

Adicione ao /etc/postfix/main.cf:

smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous

Crie / etc / postfix / sasl / sasl_passwd

[smtp.gmail.com]:587 emailtouseforsending@gmail.com:password

Então:

sudo postmap /etc/postfix/sasl/sasl_passwd
sudo chown -R root:postfix /etc/postfix/sasl
sudo chmod 750 /etc/postfix/sasl
sudo chmod 640 /etc/postfix/sasl/sasl_passwd*

Edite / etc / aliases e adicione:

root: email@example.com

Por fim, execute:

sudo newaliases
sudo systemctl stop postfix.service
sudo systemctl start postfix.service

Agora, você pode testar se o redirecionamento está funcionando:

echo "Test to root." | mail -s "Test message to root" root

Espero que ajude.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.