Grep
訪問 URL 時觸發操作
假設我發送了一封電子郵件,其中包含指向我的網站的連結,我真的希望他會訪問它(手指交叉的風格):
http://www.example.com/?utm_source=email392
或者
http://www.example.com/somefile.pdf?utm_source=email392
如何通過定期檢查使 Linux 在訪問此 URL 時觸發一個操作(例如向自己發送一封自動電子郵件)
/var/log/apache2/other_vhosts_access.log
?我無法在 PHP 級別執行此操作,因為我需要為各種來源/網站執行此操作(其中一些使用 PHP,有些不使用,只是連結到要下載的文件等;即使對於使用 PHP 的網站也是如此,我不想修改每個
index.php
從那裡做,這就是為什麼我更喜歡 Apache 日誌解析方法)
使用 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
,在寫入日誌時輸出行。如果您的日誌文件由logrotate定期移動,請添加--follow=name
和--retry
選項來監視文件路徑,而不僅僅是文件描述符。tail的輸出通過管道傳輸到
grep
,它過濾與您的 URL 匹配的相關行。