O comando at repentinamente / aleatoriamente executa tarefas

2

O comando at tem um comportamento estranho e não consigo encontrar o porquê.

História - Em três dias, precisarei enviar e-mails em horários específicos para surpreender alguém. Não serei capaz de monitorar se tudo está funcionando corretamente, pois estarei em um avião por aproximadamente 20 horas. Tudo deve correr perfeitamente. : -)

Script - Estou usando o comando at para enfileirar tarefas para execução posterior. Eu criei um monte de arquivos (um por email), com o seguinte formato:

Conteúdo do mail1.txt (exemplo)

This is a subject
This is a message...
... on several lines

Este é o meu script:

#!/bin/bash

function sendit {
        FROM_MAIL="[email protected]"
        RCPT_MAIL="[email protected]"

        SUBJECT=$(head -n  1 $1)
        MESSAGE=$(tail -n +2 $1)

        echo -e "$MESSAGE" |mail -s "$SUBJECT" -r $FROM_MAIL $RCPT_MAIL
}

# Note, time is EDT, it correspond to the date of my server
sendit mail1.txt|at 02:37 May 03
sendit mail2.txt|at 02:38 May 03
sendit mail3.txt|at 03:13 May 03
[...]

Eu então executo meu script:

$ bash script.sh
warning: commands will be executed using /bin/sh
job 35 at Tue May  3 02:37:00 2016
warning: commands will be executed using /bin/sh
job 36 at Tue May  3 02:38:00 2016
warning: commands will be executed using /bin/sh
job 37 at Tue May  3 03:13:00 2016
[...]

Tudo parece perfeito, no entanto, quando eu verifico meus e-mails alguns minutos depois, vi que alguns dos e-mails foram enviados ... (parece aleatório)

Alguma ideia?

    
por DontMessIt 03.05.2016 / 08:50

2 respostas

4

O | envia o stdout do processo à esquerda para o comando correto. Sua função sendit realmente envia o e-mail, mas não produz muita saída no stdout (na verdade, não lembro qual é a saída de mail ), portanto, a entrada para at não é um comando para enviar o e-mail .

Considere que, como usuário, você normalmente usaria at da seguinte forma:

at 02:37 May 03        # This will read commands from stdin until Ctrl/D
sendit mail1.txt
Ctrl/D

Você também pode ter canalizado o comando sendit para at programaticamente:

echo 'sendit mail1.txt' | at 02:37 May 03
    
por 03.05.2016 / 09:19
1

Eu acho que você quer dizer echo sendit mail1.txt|at 02:37 May 03 .

    
por 03.05.2016 / 11:14

Tags