私が他の人に私のウェブサイトへのリンクを含む電子メールを送信し、その人がその電子メールを訪問することを本当に望んでいるとしましょう。
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を使用するように設定されている場合に機能します。