URL에 액세스하면 작업 트리거

URL에 액세스하면 작업 트리거

내가 다른 사람에게 내 웹사이트 링크가 포함된 이메일을 보내고 그 사람이 그 이메일을 방문하기를 정말로 바란다고 가정해 보겠습니다.

http://www.example.com/?utm_source=email392

또는

http://www.example.com/somefile.pdf?utm_source=email392

정기적인 확인을 통해 이 URL에 액세스할 때 Linux에서 작업(예: 자동 이메일 보내기 등)을 트리거하도록 하려면 어떻게 해야 합니까 /var/log/apache2/other_vhosts_access.log?

다양한 소스/웹 사이트(일부는 PHP를 사용하고 일부는 다운로드할 파일에 연결하는 등)에 대해 수행해야 하기 때문에 PHP 수준에서 이 작업을 수행할 수 없습니다. 심지어 PHP를 사용하는 사이트의 경우에도 원하지 않습니다 거기에서 시작하도록 각각을 수정 index.php하므로 Apache 로그 구문 분석 방법을 선호합니다)

답변1

Bash 프로세스 교체를 사용한 실시간 로그 모니터링:

#!/bin/bash

while IFS='$\n' read -r line;
do
    # action here, log line in $line

done < <(tail -n 0 -f /var/log/apache2/other_vhosts_access.log | \
         grep '/somefile.pdf?utm_source=email392')

프로세스 대체내부 파이프의 출력을 읽기 루프에 공급합니다 <(...). 로그 줄 자체는 변수에 할당됩니다 $line.

로그를 보려면 다음 방법을 사용하십시오.tail -f, 로그에 기록되는 행을 출력합니다. 로그 파일이 정기적으로 이동하는 경우로그 회전, 파일 설명자 대신 파일 경로를 감시하는 옵션이 --follow=name추가 되었습니다.--retry

출력은 다음에서 비롯됩니다.꼬리로 운송grep, URL과 일치하는 관련 행을 필터링합니다.

답변2

다음과 같이 단일 라이너를 사용할 수 있습니다.

grep -q "utm_source=email392" /var/log/apache2/other_vhosts_access.log && grep -q "utm_source=email392" /var/log/apache2/other_vhosts_access.log | mail -S "Accessed!" [email protected]

그리고 정기적으로 실행함으로써 cron.

더 자세히 설명하자면 첫 번째 항목은 grep추가 조치가 필요한지 확인하는 데만 사용됩니다(추가하면 -q조용하게 만들어 발견할 수 있는 일치 항목을 숨깁니다). &&즉, 나머지 줄은 grep첫 번째 줄에서 일치하는 항목이 발견된 경우에만 실행됩니다(즉, 0이 반환됨). 이 경우 두 번째로 얻은 일치 행은 매개 grep변수 ( "mail[email protected]-s방문했습니다!").

동일한 논리( grep -q ... && ...)를 사용하여 다른 작업을 수행할 수 있습니다. 그런 다음 &&더 복잡한 작업을 위한 쉘 스크립트와 같이 원하는 것은 무엇이든 실행할 수 있습니다 .

grep로그 회전보다 이 작업을 더 자주 실행하는 경우(예: 매시간 확인하고 매일 로그를 회전하는 경우) 로그가 회전할 때까지 동일한 행이 지속적으로 반복해서 검색 되므로 작업이 여러 번 트리거될 수 있습니다. .

답변3

실패한 2ban에 대해 필터 apache-badbots.conf를 사용하고(정규식을 해당 URL로 대체) sendmail.conf 작업으로 사용해 보십시오.

[mycustombot] enable = true filter = apache-badbots ##your "custom" script action = sendmail[name=MyBadBot,[email protected]] logpath = /your/access/logs/*/path

답변4

rsyslog 및 ommail 모듈을 사용하여 이 작업을 수행할 수 있습니다.

http://www.rsyslog.com/doc/v8-stable/configuration/modules/ommail.html

그것은 다음과 같습니다:

module(load="ommail")

if $msg contains "/somefile.pdf?utm_source=email392" then {
   action(type="ommail" server="..." port=".."
       mailfrom="...."
       mailto="..."
       subject.text="Page Viewed!")
}

아파치가 로깅을 위해 syslog를 사용하도록 구성된 경우 작동합니다.

관련 정보