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 [email protected]acima 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:

[email protected]
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 [email protected]qualquer maneira.

Clonkex
fonte
@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=[[email protected]]
mailhub=smtp.mail.yahoo.com:587
FromLineOverride=YES
UseSTARTTLS=YES
AuthUser=[[email protected]]
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]:[[email protected]]: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: [[email protected]]
From: "whateverYaWant" <[[email protected]]>
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 [[email protected]]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).

Clonkex
fonte
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á.

Oli
fonte
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.

Oh Ar
fonte
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 [email protected]: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 protected]

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.

duli
fonte