Muffin72
Anmeldungsdatum: 18. Juni 2012
Beiträge: 190
|
Hallo, ist es möglich sich vom Webserver eine Mail per MTA schicken zu lassen, sobald in einer bestimmten Logdatei ein neuer Eintrag erscheint? Als konkreter Fall z. B., sobald sich jemand eine Homepage auf dem Webserver aufruft, erscheint ein Logeintrag in der access.log von apache. Diesen Eintrag würde ich mir gerne per Mail schicken lassen, wäre per echo über postfix von Prinzip ja kein Problem, allerdings möchte ich das nur sobald ein neuer Eintrag stattfindet, also zeitnah und situationsbezogen. So gibt es noch andere Logs, die interessant wären, sofern sich da etwas tut. Ist dies so möglich?
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11260
Wohnort: München
|
Hallo, natürlich kann man das machen (vgl. z.B. Alternativen zu inotify für ein Beispiel wie man eine Logdatei beobachten kann), aber eine Mail pro neue Zeile in einer Logdatei kann ziemlich mörderisch sein, wenn es in kurzer Zeit viele Ereignisse gibt. Außerdem kann die Dauer für die Auslieferung von E-Mails (je nachdem über welche Server es läuft) schwanken - wenn es schnell gehen soll, könnte man in Richtung Telegram oder IRC denken.
|
sebix
Ehemalige
Anmeldungsdatum: 14. April 2009
Beiträge: 5582
|
Auch mit den APIs von journald in diversen Programmiersprachen kann man Logs des Webservers beobachten, dafuer muss man allerdings programmieren koennen (oder Code aus dem Internet kopieren ohne ihn zu verstehen).
|
Muffin72
(Themenstarter)
Anmeldungsdatum: 18. Juni 2012
Beiträge: 190
|
Der Hinweis mit den Alternativen hört sich sehr gut an. Werde ich mal testen, vielen Dank Euch Beiden ☺
|
Muffin72
(Themenstarter)
Anmeldungsdatum: 18. Juni 2012
Beiträge: 190
|
Noch eine kurze Frage (leider mit einem neuen Post, nicht dass das im Edit unter geht 😉) Wäre dann die Syntax etwa so:
tail -F /var/log/apache2/access.log | grep --line-buffered httpd | while read; do echo "XXX" | mail -s "XXX" "XXX@XXX; done
Wäre dies korrekt?
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11260
Wohnort: München
|
Wenn die für dich interessanten Zeilen "httpd" enthalten, sollte das passen. Sonst musst du halt den grep Befehl anpassen (oder ganz weglassen, wenn du nicht filtern willst).
|
Muffin72
(Themenstarter)
Anmeldungsdatum: 18. Juni 2012
Beiträge: 190
|
Ah, das httpd habe ich völlig verpeilt, stimmt, der Fluch von copy and paste. Nein, mir geht es um jeden Eintrag, sobald sich jemand auf den Webserver schaltet und die Homepage aufruft. Dann würde ich den grep komplett weglassen bzw. bei anderen Logs grep entsprechend anpassen. Super Sache, vielen Dank ☺
|
Muffin72
(Themenstarter)
Anmeldungsdatum: 18. Juni 2012
Beiträge: 190
|
Jetzt muss ich nochmal was nachhaken: Mailversand klappt bei neuem Log-Eintrag, soweit gut. Nun wäre es noch nett den Inhalt des Logs per Mail als reinen Test zu bekommen. Etwas googlen hat mich zu uuencode, aber es muss doch auch was bordeigenes geben, zudem will ich ja nicht die log als Anhang, sondern als reine Textausgabe in der Mail. Habe es mit >> probiert, aber das wollte auch nicht.
Wäre nett wenn Ihr mir nochmal auf die Sprünge helft ☺
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11260
Wohnort: München
|
Muffin72 schrieb: Nun wäre es noch nett den Inhalt des Logs per Mail als reinen Test zu bekommen.
Was bekommst du denn stattdessen? So würde er die Zeile aus dem Log in die Variable line einlesen und die dann weiterreichen:
| tail -F /var/log/apache2/access.log | while read -r line; do
mail -s "XXX" "XXX@XXX <<< "$line"
done
|
Und so sollte er die Logdatei als Body nehmen:
| tail -F /var/log/apache2/access.log | while read; do
mail -s "XXX" "XXX@XXX < /var/log/apache2/access.log
done
|
|
Muffin72
(Themenstarter)
Anmeldungsdatum: 18. Juni 2012
Beiträge: 190
|
Klappt, vielen Dank für Deine geduldige und tolle Hilfe ☺
|