![配置 Cron 以邮寄“last”命令的每周输出](https://linux22.com/image/139658/%E9%85%8D%E7%BD%AE%20Cron%20%E4%BB%A5%E9%82%AE%E5%AF%84%E2%80%9Clast%E2%80%9D%E5%91%BD%E4%BB%A4%E7%9A%84%E6%AF%8F%E5%91%A8%E8%BE%93%E5%87%BA.png)
我需要安排一份每周日晚上 10:00 运行的每周报告,其中将显示已登录服务器的所有帐户(用户名和 IP 地址)。此输出将发送到电子邮件。
我想为此目的使用“last”和“mail”命令。
cron 看起来像下面这样,但是 '-A' 选项将列出整个登录用户信息。然而,我正在查找仅上周登录的用户信息。如何实现这一目标?
0 22 * * 0 /usr/bin/last -a | mail -s "SSH Logins Report" -r [email protected]
服务器信息
操作系统:CentOS Linux 7.5 版
内核:3.10.0-862.2.3.el7.x86_64
答案1
我会使用utmpdump
命令,因为它的输出中有年份
for weekday in 'monday' 'tuesday' 'wednesday' 'thursday' 'friday' 'saturday' 'sunday' ;
do
/usr/bin/utmpdump /var/log/wtmp | grep "`date --date \"$weekday week ago\" '+%a %b %d\s[^ ]*\s%Y'`"
done 2> /dev/null
答案2
#!/bin/bash
LAST_OUTPUT_FILE=/tmp/last.txt
last -a > ${LAST_OUTPUT_FILE}
OUTPUT_FILE=/tmp/out.txt
> ${OUTPUT_FILE}
for i in {1..6}
do
DATE_TO_SEARCH=$(date -d"-${i}days" "+%b %d" | sed "s/.\([1-9]\)/ \1/")
grep "${DATE_TO_SEARCH}" ${LAST_OUTPUT_FILE} >> ${OUTPUT_FILE}
done
mail -s "SSH Logins Report" -r [email protected] < ${OUTPUT_FILE}
echo "Output File : ${OUTPUT_FILE}"
echo "Last File extract : ${LAST_OUTPUT_FILE}"