crontab arquivo de saída por anexo

1

Não consigo receber o relatório de saída do crontab por email como anexo. Eu tentei o seguinte código, mas recebo um arquivo em branco:

50 * * * * root touch /home/text_created >> 
/home/log_crontab.txt | mail -s "Email Subject" -a "/home/log_contab.txt" 
this_is_my_email

É um teste muito simples apenas para executar o crontab junto com o recurso de envio de e-mail. Qual é o problema com o código acima?

    
por R99Photography 21.02.2018 / 22:12

2 respostas

2

Você recebeu um arquivo em branco porque o arquivo /home/log_contab.txt estava vazio quando o email foi enviado.

Por que:

Os processos nos dois lados do canal anônimo ( | ) começam simultaneamente; assim, quando o comando no lado esquerdo acrescentar o STDOUT (assumindo algum) ao arquivo /home/log_contab.txt , o comando mail terminou a execução (com um arquivo em branco /home/log_contab.txt como anexo, como presumivelmente estava vazio para começar) .

Para obter o que você deseja, execute um após o outro, condicionalmente :

50 * * * * command_1 && command_2

Altere os comandos de acordo.

    
por 21.02.2018 / 22:58
0

Piping a saída para mail não está certo. Você está redirecionando a saída para um arquivo, então nada será enviado para o pipe. E quando você usa um pipe, os dois comandos são executados simultaneamente, então mail não espera que o primeiro comando seja concluído.

Execute-os sequencialmente com ; .

E touch não produz saída. Se você quiser uma mensagem de log que o trabalho cron teve sucesso, você precisa escrever isso explicitamente.

50 * * * * root if touch /home/text_created; then echo "Touch successful"; else echo "Touch failed"; fi >> /home/log_crontab.txt 2>&1; mail -s "Email Subject" -a "/home/log_contab.txt" this_is_my_email
    
por 21.02.2018 / 22:55