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が返されます)。この場合、2番目に取得した一致行は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!")
}

Apacheがログにsyslogを使用するように設定されている場合に機能します。

関連情報