Wie kann ich Daten von Benutzern einer VM effizienter erfassen?

Wie kann ich Daten von Benutzern einer VM effizienter erfassen?

Ich unterrichte diesen Sommer einen Kurs. Die erste Aufgabe meiner Schüler wird es sein, eine von mir erstellte virtuelle Maschine zu installieren (auf der Maschine wird Ubuntu laufen). Nach der Installation müssen sie das folgende Skript ausführen

$ 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!"

Das Skript zeichnet ihren Nachnamen auf und sendet mir eine E-Mail, die mich darüber informiert, dass sie die Maschine installiert haben.

Das Ärgerliche dabei ist, dass ich am Ende 30 E-Mails erhalte und alle diese Informationen selbst analysieren muss. Ich frage mich, ob es für mich eine bessere Möglichkeit gibt, diese Daten zu sammeln. Letztendlich wäre es toll, ein Bash-Skript zu haben, das jeden Nachnamen an eine CSV-Datei anhängt, auf die ich zugreifen kann.

Gibt es in Unix ein Tool, das für solche Dinge entwickelt wurde?

Antwort1

Da es sich, wie Sie sagen, um eine von Ihnen erstellte Maschine handelt, warum mounten Sie nicht ein freigegebenes Laufwerk (CIFS oder NFS) und führen die Ausgabe dorthin durch?

Dies kann auch für andere Dateifreigabezwecke nützlich sein.

Antwort2

Es gibt mehrere Mail Delivery Agents (MDA), die E-Mails nach verschiedenen Kriterien (einschließlich Subject:Header) filtern können. Einige der gebräuchlichsten sindprocmail,Mail Drop, UndFilter.

Ich verwende es procmailseit Jahrzehnten. Um E-Mails mit diesem Betreff in ein separates Postfach zu filtern, würde ich in meinem eine Regel wie diese erstellen ~/.procmailrc:

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

procmailunterstützt sowohl mboxPostfächer mit einer einzelnen Datei als auch MaildirPostfächer mit einer Datei pro Nachricht. Das obige Beispiel speichert die Nachricht in einem Maildir-Ordner namens ~/Mail/class-update/. Entfernen Sie den nachfolgenden Text /, wenn Sie das Mbox-Format bevorzugen.

Übrigens wäre es eine gute Idee:

  1. Fragen Sie auch nach dem Studentenausweis. Meiner Erfahrung nach kommt es sehr häufig vor, dass Nachnamen doppelt angegeben werden (eigentlich sollten Sie nach dem „Familiennamen“ und nicht nach dem „Nachnamen“ oder „Familiennamen“ fragen, da der Familienname nicht immer der Nachname ist).

  2. Ändern Sie den Betreff in "Class Update: $(timestamp) $name [$id]"oder Ähnliches. Dann procmailmüssen Ihre (oder andere MDA-)Regeln nur den Betreff:-Header extrahieren und können den Rest der Nachricht wegwerfen (oder besser noch in einem Postfach archivieren).

Beispielsweise speichert die folgende Procmail-Regel die Nachricht in einem Ordner wie oben, extrahiert dann die Header „Datum:“ und „Betreff:“ und speichert sie in einer Datei.

: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
}

Zu Ihrer Information: formailEs handelt sich um ein E-Mail-Formatierungstool, das mitgeliefert wird procmail.

verwandte Informationen