Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

fetchmail - postconnect Befehl scheitert

Alles rund um die Server (Web-, Mail-, Datenbank-, Datenaustausch-, etc.) die man unter Linux betreiben kann

Moderator: Moderatoren

Antworten
radiergummi
Newbie
Newbie
Beiträge: 38
Registriert: 14. Feb 2009, 12:34

fetchmail - postconnect Befehl scheitert

Beitrag von radiergummi » 12. Aug 2018, 17:16

OpenSuse 42.3

Hallo Forum,
mich hat schon immer gestört, dass fetchmail keine Zeitstempel ins Log schreibt.
In der Datei /etc/fetchmailrc habe ich daher bei jedem der 7 abzufragenden Mail-Account folgendes angefügt:

Code: Alles auswählen

preconnect "date >> /var/log/fetchmail"
Das funktioniert prima, hat aber den Nachteil, dass alle 2 Minuten 7 Zeitstempel ins Log geschrieben werden, auch wenn gar keine Nachrichten abzuholen waren.
Daher habe ich die postconnect-Option ausprobiert: wenn die letzte Zeile im Log-File ein Zeitstempel ist (d. h. "CEST" gefunden wird), dann lösche sie.

Code: Alles auswählen

postconnect "sed -i '${/CEST /d;}' /var/log/fetchmail"
Auf der Kommandozeile funktioniert das. Wenn fetchmail das machen soll, erhalte ich folgende Fehlermeldung

Code: Alles auswählen

sed: Kann temporäre Datei /var/log/sedgkPetA nicht öffnen: Keine Berechtigung
fetchmail: Nach-Verbindungs-Befehl scheiterte mit Status 4
Die Log-Datei gehört fetchmail und ist in der Gruppe root.

Kann mir jemand weiterhelfen?

Danke für Tipps!

Gruß,
Radiergummi

Werbung:
spoensche
Moderator
Moderator
Beiträge: 7391
Registriert: 30. Okt 2004, 23:53
Wohnort: Siegen

Re: fetchmail - postconnect Befehl scheitert

Beitrag von spoensche » 13. Aug 2018, 17:10

Mit welchem User führst du denn fetchmail aus?

Fetchmail schreibt sehr wohl ein Logfile, wenn man in der Konfig den Syslog aktiviert.

Code: Alles auswählen

set syslog

josef-wien
Ultimate Guru
Ultimate Guru
Beiträge: 5099
Registriert: 23. Sep 2008, 17:09

Re: fetchmail - postconnect Befehl scheitert

Beitrag von josef-wien » 13. Aug 2018, 18:10

radiergummi hat geschrieben:
12. Aug 2018, 17:16
Auf der Kommandozeile funktioniert das.
... aber nur als root, denn außer ihm darf üblicherweise niemand in /var/log eine Datei anlegen und löschen, denn dafür sind die Berechtigungsdefinitionen des Verzeichnisses zuständig. Ob und wie Du sed abgewöhnen kannst, im Verzeichnis der zu bearbeitenden Datei seine temporäre Datei anzulegen, kann ich Dir aber nicht sagen.

radiergummi
Newbie
Newbie
Beiträge: 38
Registriert: 14. Feb 2009, 12:34

Re: fetchmail - postconnect Befehl scheitert

Beitrag von radiergummi » 13. Aug 2018, 19:32

Danke für Eure Antworten!
spoensche hat geschrieben:
13. Aug 2018, 17:10
Mit welchem User führst du denn fetchmail aus?
fetchmail läuft als daemon

Code: Alles auswählen

fileserver:/tmp # ps -aef | grep fetchmail
root     19564 16142  0 19:07 pts/4    00:00:00 grep --color=auto fetchmail
fetchma+ 21719     1  0 03:19 ?        00:01:02 /usr/bin/fetchmail -d 120 -a -L /var/log/fetchmail -f /etc/fetchmailrc
spoensche hat geschrieben:
13. Aug 2018, 17:10
Fetchmail schreibt sehr wohl ein Logfile, wenn man in der Konfig den Syslog aktiviert.
Ja, ich kann das Logging in der /etc/sysconfig/fetchmail mit

Code: Alles auswählen

FETCHMAIL_DEFAULT_LOGFILE="/var/log/fetchmail" 
oder
FETCHMAIL_DEFAULT_LOGFILE="syslog" 
einschalten (bei mir die obere Variante). Mit

Code: Alles auswählen

FETCHMAIL_EXPERT_OPTIONS="-v" ... "vvv"
wird die Gesprächigkeit justiert. Aber selbst nur ein "v" erzeugt unglaublich viel (zuviel) Daten, die ich gar nicht will.
josef-wien hat geschrieben:
13. Aug 2018, 18:10
Ob und wie Du sed abgewöhnen kannst, im Verzeichnis der zu bearbeitenden Datei seine temporäre Datei anzulegen, kann ich Dir aber nicht sagen.
Genau da setze ich jetzt an. Ich kam leider erst heute auf die Idee, nach einem sed-Problem zu suchen. Was ich jetzt vorhabe gefällt mir zwar nicht, weil ich von der Standardkonfiguration abweiche, aber wenn ich dadurch bekomme, was ich möchte, so what.

Ich möchte folgendes probieren:

Code: Alles auswählen

FETCHMAIL_DEFAULT_LOGFILE="/var/log/fetchmail/fetchmail.log
Für das Verzeichnis /var/log/fetchmail vergebe ich dann entsprechende Schreibrechte.

Das sollte doch gehen, oder?

Parallel schau ich mal, ob man nicht doch dem sed ein beliebiges temp-Verzeichnis unterjubeln kann. Das wäre dann m. E. die bessere Lösung.

Gruß,
Radiergummi

spoensche
Moderator
Moderator
Beiträge: 7391
Registriert: 30. Okt 2004, 23:53
Wohnort: Siegen

Re: fetchmail - postconnect Befehl scheitert

Beitrag von spoensche » 15. Aug 2018, 17:39

radiergummi hat geschrieben:
13. Aug 2018, 19:32
Danke für Eure Antworten!
spoensche hat geschrieben:
13. Aug 2018, 17:10
Mit welchem User führst du denn fetchmail aus?
fetchmail läuft als daemon

Code: Alles auswählen

fileserver:/tmp # ps -aef | grep fetchmail
root     19564 16142  0 19:07 pts/4    00:00:00 grep --color=auto fetchmail
fetchma+ 21719     1  0 03:19 ?        00:01:02 /usr/bin/fetchmail -d 120 -a -L /var/log/fetchmail -f /etc/fetchmailrc
Wie man sieht, läuft der fetchmail, vernünftigerweise, mit einem eigenen Benutzer. Daher kann unter /var/log/ das Logfile nicht geschrieben werden.

radiergummi hat geschrieben: Ich möchte folgendes probieren:

Code: Alles auswählen

FETCHMAIL_DEFAULT_LOGFILE="/var/log/fetchmail/fetchmail.log
Für das Verzeichnis /var/log/fetchmail vergebe ich dann entsprechende Schreibrechte.

Das sollte doch gehen, oder?
Nein. Der User fetchmail hat unter /var/log keine Rechte um Dateien anzulegen und zu schreiben. Setze die Variable auf "syslog".
radiergummi hat geschrieben: Parallel schau ich mal, ob man nicht doch dem sed ein beliebiges temp-Verzeichnis unterjubeln kann. Das wäre dann m. E. die bessere Lösung.
Wozu willst du alle Logmeldungen, in denen ein CEST drin vorkommt löschen? Wenn es im Logfile stünde, würdest du alle Zeilen löschen und dich selbst jeglicher Möglichkeit zur Fehleranalyse berauben und das ist alles andere als sinnvoll, um nicht zu sagen totaler Unsinn.

josef-wien
Ultimate Guru
Ultimate Guru
Beiträge: 5099
Registriert: 23. Sep 2008, 17:09

Re: fetchmail - postconnect Befehl scheitert

Beitrag von josef-wien » 15. Aug 2018, 18:03

radiergummi hat geschrieben:
13. Aug 2018, 19:32
Für das Verzeichnis /var/log/fetchmail vergebe ich dann entsprechende Schreibrechte.

Das sollte doch gehen, oder?
Selbstverständlich funktioniert das.

radiergummi
Newbie
Newbie
Beiträge: 38
Registriert: 14. Feb 2009, 12:34

Re: fetchmail - postconnect Befehl scheitert

Beitrag von radiergummi » 16. Aug 2018, 08:54

spoensche hat geschrieben:
15. Aug 2018, 17:39
Daher kann unter /var/log/ das Logfile nicht geschrieben werden.
Doch, doch, das Log wird brav geschrieben, bloss der Inhalt gefällt mir nicht.
spoensche hat geschrieben:
15. Aug 2018, 17:39
Der User fetchmail hat unter /var/log keine Rechte um Dateien anzulegen und zu schreiben.
In /var/log scheint fetchmail tatsächlich eine Datei nicht ANLEGEN zu dürfen, eine existierende Datei VERÄNDERN darf fetchmail schon. Daher fällt fetchmail auf den Bauch, wenn das Log-File nicht existiert (vorher mit touch anlegen!).
spoensche hat geschrieben:
15. Aug 2018, 17:39
Wozu willst du alle Logmeldungen, in denen ein CEST drin vorkommt löschen? Wenn es im Logfile stünde, würdest du alle Zeilen löschen und dich selbst jeglicher Möglichkeit zur Fehleranalyse berauben und das ist alles andere als sinnvoll, um nicht zu sagen totaler Unsinn.
Äh (räusper) nein, gar nicht.


Mit dem Ausdruck

Code: Alles auswählen

'${/CEST /d;}'
sucht sed das Muster in der letzten Zeile ($) der Datei und auch nur die letzte Zeile würde gelöscht.

Ich will das Suchmuster übrigens auf "CE?T 20" ändern, sonst würde das alles nur während des Sommers funktionieren.

Fall 1: es gibt Nachrichten zu holen
  • preconnect schreibt einen Zeitstempel
  • fetchmail loggt "x Nachrichten blablablubb gelesen .... gelöscht"
  • postconnect sucht und findet kein CEST und macht daher nichts.
Im Ergebnis sähe das dann so aus:

Code: Alles auswählen

So 12. Aug 17:05:25 CEST 2018
fetchmail: 1 Nachricht für X bei Y (21735 Bytes).
fetchmail: Nachricht Z:1 von 1 wird gelesen (21735 Bytes) gelöscht
So 12. Aug 17:23:05 CEST 2018
fetchmail: 1 Nachricht für R bei S (45623 Bytes).
fetchmail: Nachricht T:1 von 1 wird gelesen (45623 Bytes) gelöscht
Und genau so würde ich es gerne haben.


Fall 2: es gibt keine Nachrichten zu holen
  • preconnect schreibt einen Zeitstempel (enthält "CEST")
  • fetchmail loggt nichts
  • postconnect sucht und findet ein CEST und löscht den eben geschriebenen Zeitstempel wieder.
Damit bliebe das Log ohne neue Nachrichten im Ergebnis unverändert.

Da Fall 2 noch nicht richtig behandelt wird, sieht das Log derzeit so aus.

Code: Alles auswählen

So 12. Aug 17:11:38 CEST 2018
So 12. Aug 17:11:39 CEST 2018
So 12. Aug 17:11:39 CEST 2018
So 12. Aug 17:11:40 CEST 2018
So 12. Aug 17:11:40 CEST 2018
So 12. Aug 17:11:41 CEST 2018
So 12. Aug 17:11:42 CEST 2018
So 12. Aug 17:13:43 CEST 2018
So 12. Aug 17:13:43 CEST 2018
So 12. Aug 17:13:44 CEST 2018
So 12. Aug 17:13:44 CEST 2018
So 12. Aug 17:13:45 CEST 2018
So 12. Aug 17:13:45 CEST 2018
So 12. Aug 17:13:47 CEST 2018
So 12. Aug 17:15:47 CEST 2018
So 12. Aug 17:15:48 CEST 2018
So 12. Aug 17:15:48 CEST 2018
So 12. Aug 17:15:49 CEST 2018
So 12. Aug 17:15:49 CEST 2018
So 12. Aug 17:15:50 CEST 2018
So 12. Aug 17:15:51 CEST 2018
So 12. Aug 17:17:52 CEST 2018
So 12. Aug 17:17:52 CEST 2018
So 12. Aug 17:17:53 CEST 2018
So 12. Aug 17:17:53 CEST 2018
So 12. Aug 17:17:54 CEST 2018
So 12. Aug 17:17:54 CEST 2018
So 12. Aug 17:17:56 CEST 2018
Gruß,
Radiergummi

spoensche
Moderator
Moderator
Beiträge: 7391
Registriert: 30. Okt 2004, 23:53
Wohnort: Siegen

Re: fetchmail - postconnect Befehl scheitert

Beitrag von spoensche » 16. Aug 2018, 17:18

Wenn du die Logoption syslog verwenden würdest, dann hast du das Problem erst gar nicht.

Antworten