如何更有效地從虛擬機器上的使用者收集資料?

如何更有效地從虛擬機器上的使用者收集資料?

今年夏天我正在教一門課。我的學生的第一個作業是安裝我創建的虛擬機器(機器將運行 Ubuntu)。安裝後,他們將運行以下腳本

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

該腳本記錄了他們的姓氏並向我發送一封電子郵件,通知我他們安裝了機器。

令人煩惱的是,我最終會收到 30 封電子郵件,而且我必須自己解析所有這些資訊。我想知道是否有更好的方法來收集這些數據。最終,如果有一個 bash 腳本將每個姓氏附加到我可以存取的 csv 檔案中,那就太好了。

unix中有沒有專門做這種事的工具?

答案1

正如您所說,既然它是您創建的機器,為什麼不讓它安裝共用磁碟機(CIFS 或 NFS)並向其輸出呢?

這對於其他文件共享需求也可能很有用。

答案2

有多種郵件傳送代理程式 (MDA) 可依各種標準(包括Subject:標頭)過濾郵件。一些更常見的是程式郵件,郵件投遞, 和篩選

我已經用了procmail幾十年了。要將帶有“主題:”標頭的郵件過濾到單獨的郵箱中,我將在我的中建立以下規則~/.procmailrc

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

procmail支援mbox單文件郵箱和Maildir每封郵件一個文件的郵箱。上面的範例將把郵件儲存在名為 的 Maildir 資料夾中~/Mail/class-update//如果您喜歡 mbox 格式,請刪除尾隨。

順便說一句,最好:

  1. 還要索取學生證。根據我的經驗,重複姓氏是非常常見的(實際上,您應該詢問“姓氏”而不是“姓氏”或“姓氏”,因為姓氏並不總是姓氏)。

  2. 將主題更改為"Class Update: $(timestamp) $name [$id]"或類似。然後,您的procmail(或其他 MDA)規則只需要提取主題:標頭,並可以丟棄(或者更好的是,存檔到郵箱)郵件的其餘部分。

例如,以下 procmail 規則會將郵件儲存到上述資料夾中,然後提取 Date: 和Subject: 標頭並將它們儲存到檔案中。

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

僅供參考,formail是一個郵件格式化工具,附帶procmail.

相關內容