O comando Tee está reduzindo as linhas?

3

Eu tenho o código assim:

54 08 * * * /usr/local/bin/curator --dry-run --config /home/itadmin/.curator/curator.yml /home/itadmin/.curator/daily.yml 2>&1 | /usr/bin/tee -a /home/itadmin/.curator/logs.txt | /usr/bin/tee /home/itadmin/.curator/history.txt | if [ $(wc -l </home/itadmin/.curator/history.txt) -ge 2 ]; then  mail -s 'Snapshot Status' [email protected]; fi

O que estou fazendo é enviar a saída do cron para o arquivo logs.txt para fins de histórico e enviar o mesmo para o history.txt, no qual a condição if funcionará.

Na verdade, a saída do cron é assim

2017-05-17 08:33:01,395 INFO      Preparing Action ID: 1, "snapshot"
2017-05-17 08:33:01,404 INFO      Master-only flag detected. Connected to non-master node. Aborting.

Mas eu tenho em logs.txt é

2017-05-17 08:54:01,427 INFO      Preparing Action ID: 1, "snapshot"

No arquivo history.txt eu não tenho nada

Mas estes funcionaram bem quando eu fiz a remoção do comando if (ou seja, if [ $(wc -l </home/itadmin/.curator/history.txt) -ge 2 ]; then mail -s 'Snapshot Status' [email protected]; fi) .

Eu não sei porque isso está acontecendo?

OBRIGADO

    
por Private 17.05.2017 / 11:32

1 resposta

1

Você precisa dividir seu trabalho em dois comandos (como abaixo) para que history.txt seja fechado antes de você começar a verificar seu tamanho.

O que está acontecendo é que a instrução if examina o tamanho do arquivo depois que ele foi truncado, mas antes de ter sido gravado. Isso significa que o último componente do pipeline apenas sai e tudo antes disso morre com SIGPIPE .

54 08 * * * /usr/local/bin/curator --dry-run --config /home/itadmin/.curator/curator.yml /home/itadmin/.curator/daily.yml 2>&1 | /usr/bin/tee -a /home/itadmin/.curator/logs.txt > /home/itadmin/.curator/history.txt; if [ $(wc -l </home/itadmin/.curator/history.txt) -ge 2 ]; then mail -s 'Snapshot Status' [email protected] < /home/itadmin/.curator/history.txt; fi

Não estou ciente de uma maneira de fazer isso sem usar o arquivo intermediário. Uma resposta para Enviando email da linha de comando se o corpo não estiver vazio sugere o uso do utilitário ifne para o caso especial de entrada vazia / não vazia.

    
por 17.05.2017 / 13:37