Como posso coletar dados de forma mais eficiente de usuários em uma vm?

2

Estou dando um curso neste verão. A primeira tarefa dos meus alunos será instalar uma máquina virtual que eu criei (a máquina rodará o Ubuntu). Após a instalação, eles devem executar o seguinte script

$ cat ~/bin/all-done
#!/bin/bash

timestamp() {
    date +"%Y-%m-%d_%H-%M-%S"
}

echo "Type your last name: " 
read name

SUBJECT="Class Update"
TO="my_email@my_domain.com"
MESSAGE="/tmp/message.txt"

echo "$name completed the assignment" >> $MESSAGE
echo "Time: $(timestamp)" >> $MESSAGE

/usr/bin/mail -s "$SUBJECT" "$TO" < $MESSAGE

rm $MESSAGE

echo "You completed the first assignment. Welcome to the class!"

O script registra seu sobrenome e me envia um e-mail notificando que eles instalaram a máquina.

A parte chata aqui é que eu vou acabar recebendo 30 e-mails e que eu tenho que analisar todas essas informações eu mesmo. Eu estou querendo saber se existe uma maneira melhor para eu coletar esses dados. Por fim, seria ótimo ter um script bash que acrescente cada sobrenome a um arquivo csv que eu possa acessar.

Existe uma ferramenta no unix projetada para fazer esse tipo de coisa?

    
por Brian Fitzpatrick 17.05.2016 / 06:57

2 respostas

2

Como, como você diz, é uma máquina que você criou, por que não montá-lo em uma unidade compartilhada (CIFS ou NFS) e fazer a saída para ele?

Isso também pode ser útil para outras necessidades de compartilhamento de arquivos.

    
por 17.05.2016 / 07:19
1

Existem vários Agentes de Entrega de Correio (MDA) que podem filtrar correio por vários critérios (incluindo Subject: header). Alguns dos mais comuns são procmail , maildrop e filtro .

Eu usei procmail por décadas. Para filtrar e-mails com o cabeçalho Assunto: em uma caixa de correio separada, criei uma regra como esta no meu ~/.procmailrc :

:0
* ^Subject: Class Update
class-update/

procmail suporta as caixas de correio de mbox de arquivo único e Maildir style de um arquivo por mensagem. O exemplo acima armazenará a mensagem em uma pasta do Maildir chamada ~/Mail/class-update/ . Remova o / à direita se você preferir o formato mbox.

BTW, seria uma boa ideia:

  1. Peça a ID do aluno também. Na minha experiência, é extremamente comum ter sobrenomes duplicados (na verdade, você deve perguntar por "Nome da Família" em vez de "sobrenome" ou "sobrenome" porque o sobrenome nem sempre é o sobrenome).

  2. Altere o assunto para "Class Update: $(timestamp) $name [$id]" ou similar. Então o seu procmail (ou outro MDA) regras só precisa extrair o cabeçalho Subject: e pode jogar fora (ou melhor ainda, arquivar em uma caixa de correio) o resto da mensagem.

Por exemplo, a seguinte regra do procmail salvará a mensagem em uma pasta como acima e, em seguida, extrairá os cabeçalhos Date: e Subject: e os salvará em um arquivo.

:0
* ^Subject: Class Update
{
    # first save a copy of the message (for a safety archive)
    :0c
    class-update/

    # then extract the Subject line and save it to a file
    :0 fw
    | formail -c -xSubject | sed -e 's/^Class Update: //' \
        >> /path/to/class-updates.txt
}

FYI, formail é uma ferramenta de formatação de e-mail que vem com procmail .

    
por 17.05.2016 / 12:58