我有 2 个脚本。脚本“A”,脚本“B”。
脚本 A 在过去 2 分钟内定期查看日志中的 dhcpacks
[dhcp release is configured to 2mins]。它每 2 分钟将 MAC 地址写入文件 [/dev/shm/dhcpacks-in-last-2min.txt
]。好的,这是有效的,活跃的客户在这个文件中。 super 棒!
脚本 B:On pastebin
我正在尝试创建一个脚本,用于监视 /dev/shm/dhcpacks-in-last-2min.txt
文件中的更改(每 1 秒一次)。好的。但是:我的观察者脚本 the pastebined工作不正常 - 有时它工作,有时它发送某人 XY logged out
,但事实并非如此!什么都没发生,问题不在脚本 A 中。
有人可以帮我指出,我错过了什么吗?我怎样才能看到一个文件(每秒),它只包含 MAC 地址,如果有人在 2 分钟内没有得到 dhcpack
,文件 /dev/shm/dhcpacks-in -last-2min.txt
更改,客户端 MAC 地址将从中消失,我需要知道它是谁 [粘贴了我的脚本 - 但有些问题]。
感谢您的任何帮助..我已经为我的脚本设置路径好几天了..:\
最佳答案
确保您正在比较的文件已排序。最好的办法是修改脚本A。
您的脚本正在尝试解析统一差异。除非另有说明(使用
-u
),diff
输出一个“正常”差异,更改标记为<
和>
.您必须用 两个 换行符分隔邮件 header 和正文。
在 Linux 上,查看文件的最佳方式是通过 Inotify,或者 inotifywait
或 incron
.
我重写脚本的尝试:
#!/usr/bin/env bash
rcpt=MYEMAIL@MYDOMAIN.COM
file=/dev/shm/dhcpacks-in-last-2min.txt
cp "$file" "$file.old"
inotifywait -qme modify "$file" | while read -r _; do
if ! cmp -s "$file.old" "$file"; then
changes=$(diff "$file.old" "$file" | sed -n "s/^</logged out:/p; s/^>/logged in:/p" | tr A-Z a-z)
subj="$(date) - $(hostname) - $(echo "$changes" | sed "s/$/,/" | tr "\n" " ")"
# In a well-configured system, this would be enough:
#mail -s "$subj" "$rcpt" <<< "$changes"
# But if yours is not,
echo -e "From: <$rcpt>\nSubject: $subj\nTo: <$rcpt>\n\n$changes\n" | ssmtp "$rcpt"
cp "$file" "$file.old"
fi
done
关于linux - 如果文件更改,请发送有关差异的电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4914575/