'sendmail'은 'logread' 출력에 의해 트리거된 알림을 안정적으로 보내지 않습니다.

'sendmail'은 'logread' 출력에 의해 트리거된 알림을 안정적으로 보내지 않습니다.

OPENWRT 라우터의 로그를 모니터링하고 PPPTD 서비스가 로그를 작성할 때 이메일을 보내려고 합니다.

Mon Nov 29 09:10:31 2021 daemon.info pptpd[5832]: CTRL: Client x.x.x.x control connection started

나는 이 스크립트를 사용하고 있습니다:

#!/bin/ash

logread -f | awk ' /control connection started/ { print "From: R01 Router <orignating [email protected]>"
       print "To: [email protected]"
       print "Mime-Version: 1.0"
       print "Content-Type: text/plain"
       print "Subject: Incoming PPTP connection from" $10
       print "Content-Transfer-Encoding: 7bit"
       print "Incoming PPTP connection from " $10 } ' | /usr/sbin/sendmail -t &

하지만 이메일이 항상 전송되는 것은 아니기 때문에 일관성 없는 결과를 얻게 됩니다. 누군가 나에게 올바른 방향을 알려줄 수 있습니까?

답변1

해결되었습니다.

이것이 작동하지 않는 이유는 logread -f다음과 같습니다.지속적으로 로그 모니터링, sendmail버퍼가 닫히지 않으므로 프로세스가 종료될 때까지 메시지가 전송되지 않습니다.

#!/bin/ash

logread -f | awk ' /control connection started/ { 
    print "From: R01 Router <[email protected]>" > "awkout.txt"
    print "To: "[email protected]" >> "awkout.txt"
    print "Mime-Version: 1.0" >> "awkout.txt"
    print "Content-Type: text/plain" >> "awkout.txt"
    print "Subject: Incoming PPTP connection from " $10 >> "awkout.txt"
    print "Content-Transfer-Encoding: 7bit" >> "awkout.txt"
    print "Incoming PPTP connection from " $10 >> "awkout.txt"
    system("ssmtp [email protected] < awkout.txt");
    } ' &

이 코드는 awk가 일치할 때마다 이메일을 보냅니다. 이것이 OpenWrt에서 로그 읽기를 모니터링하려는 모든 사람에게 도움이 되기를 바랍니다.

관련 정보