"마지막" 명령의 주간 출력을 메일로 보내도록 Cron 구성

"마지막" 명령의 주간 출력을 메일로 보내도록 Cron 구성

매주 일요일 오후 10시에 실행되도록 주간 보고서를 예약해야 합니다. 이 보고서에는 서버에 로그인한 모든 계정(사용자 이름 및 IP 주소)이 표시됩니다. 이 출력은 이메일로 전송됩니다.

이 목적으로 "last" 및 "mail" 명령을 사용하고 싶습니다.

cron은 아래와 같지만 '-ㅏ' 옵션을 선택하면 로그인한 사용자의 전체 정보가 나열됩니다. 그런데 지난주에만 로그인한 사용자에 대한 정보를 찾고 있어요. 이 목표를 달성하는 방법은 무엇입니까?

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

관련 정보