실시간 로그 파일을 추적하고 일치 항목을 이메일로 출력합니다.

실시간 로그 파일을 추적하고 일치 항목을 이메일로 출력합니다.

지금까지:

#!/bin/bash

tail -fn0 /var/log/dirsrv/redacted-domain/audit | \
while read line ; do
        echo "$line" | grep -C 5 -i "add: member"

        if [ $? = 0 ]
        then
                 mail -s "New User Added" [email protected] > /dev/null
        fi
        echo "$line" | grep -C 5 -i "add: nsaccountlock"

        if [ $? = 0 ]
        then
                 mail -s "Account Disabled" [email protected] > /dev/null
        fi
done

/var/log/dirsrv/redacted-domain/audit파일에서 grep 일치 콘텐츠를 가져와 이메일에 넣고 싶습니다 [email protected]. 위의 루프를 사용하여 grep 문을 이메일 자체에 넣는 것은 중복된 것처럼 느껴집니다(어쨌든 작동하지 않습니다).

죄송합니다. greping의 예를 포함했어야 했습니다.

time: 20200114133315 dn: cn=users,cn=groups,cn=accounts,dc=ipa,dc=domain,dc=com result: 0 changetype: modify add: member member: uid=example_user,cn=users,cn=accounts,dc=ipa,dc=domain,dc=com

add: member유형 일치를 찾고 전체 ^를 이메일로 반환하고 싶습니다 .

답변1

두 가지 옵션이 있습니다.

하나는 지금처럼 이메일을 보내는 것입니다(https://stackoverflow.com/questions/5155923/sending-a-mail-from-a-linux-shell-script)

cat /path/to/file | mail -s "your subject" [email protected]

나는 당신이 이것을 주기적으로 수행하고 일부 crontab 스크립트에서 이 이메일을 보내는 것을 상상합니다. 이 경우 crontab 상단에 를 입력하세요 [email protected].

[email protected]
0 * * * * /path/to/your/script

이 경우 서버는 이메일을 보내고 내용은 스크립트가 표준 출력으로 출력하는 내용이 됩니다. 스크립트가 아무것도 인쇄하지 않으면 이메일이 전송되지 않습니다. 이렇게 하면 mail이메일을 보내기 위해 스크립트에서 프로그램을 처리할 필요가 없습니다 . grep에게 일치하는 줄을 인쇄하도록 요청하면 이메일로 전송됩니다. 문제는 테마를 그렇게 변경할 수는 없지만 콘텐츠에 줄을 추가하는 것도 효과가 있을 것 같아요.

관련 정보