如何更有效地从虚拟机上的用户收集数据?

如何更有效地从虚拟机上的用户收集数据?

今年夏天我正在教一门课程。我的学生的第一个作业是安装我创建的虚拟机(该机器将运行 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.

相关内容