Mountain Lion fetchmail mit launchctl einrichten

G

Goulasch

Mitglied
Thread Starter
Dabei seit
20.07.2010
Beiträge
34
Reaktionspunkte
0
Hallo,

versuche automatisierten Start von fetchmail über launchd (und nicht über crontab) unter OSX Server einzurichten.
Mehrere Threads hier im Forum und über die Inet-Suche bemüht (z.B. https://www.macuser.de/threads/launch-daemons-wie-wird-es-gemacht.668390/) - allerdings bisher erfolglos.

Fetchmail liegt in /usr/bin/fetchmail":
$ ls -lah /usr/bin/fetch*
-rwxr-xr-x 1 root wheel 264K 2 Mai 11:40 /usr/bin/fetchmail
Habe nachfolgendes XML-Script (u.a. auch mal über Lingon) erstellt und in /Library/LaunchDameons abgelegt.
Der OD-User hat seine ./fetchmailrc (0700) unter /Users/otto gespeichert.
Der manuelle Aufruf erfolgt über Terminal via "sudo launchctl load /Library/LaunchDaemons/de.otto.fetchmail.plist"
Bekomme immer Fehler
May 12 07:57:34 my-domain com.apple.launchd[1] (fetchmail_otto[7870]): Job failed to exec(3). Setting up event to tell us when to try again: 2: No such file or directory
May 12 07:57:34 my-domain com.apple.launchd[1] (fetchmail_otto[7870]): Job failed to exec(3) for weird reason: 2
Das Log "/var/log/fetchmail-otto.log" (mit o+w) bleibt leer.

Hier die XML-Dati:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>de.otto.fetchmail</string>
<key>Program</key>
<string>/usr/bin/fetchmail </string>
<key>ProgramArguments</key>
<array>
<string>-f</string>
<string>/Users/otto/.fetchmailrc</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>60</integer>
</dict>
</plist>

Auch in Kombinationen mit den XML-Optionen "Debug", "GroupName", "UserName" ändert sich nichts am Fehlercode im syslog.
Ergänzend zeigt auch launchctl einen Fehler an:
$ sudo launchctl list | grep fetch
- 2 de.otto.fetchmail

Da die o.g. Fehlermeldung ja u.a. ausgibt
... No such file or directory
hier die verwendeten Dateien:
-r-xr-xr-x 1 root wheel 187K 15 Dez 22:18 /sbin/launchd
-rwxr-xr-x 1 root wheel 264K 2 Mai 11:40 /usr/bin/fetchmail
-rw-r--r-- 1 root wheel 614B 12 Mai 08:22 /Library/LaunchDaemons/de.otto.fetchmail.plist
-rw-------+ 1 otto staff 2,0K 6 Mai 12:57 /Users/otto/.fetchmailrc
-rwx------+ 1 otto staff 640K 5 Mai 17:26 /Users/otto/.fetchids

Wenn ich fetchmail aus der Console (ohne sudo) starte, klappt alles :
$ ps aux | grep fetch*
otto 32245 0,0 0,0 2434052 1820 ?? Ss 8:42am 0:02.74 /usr/bin/fetchmail --fetchmailrc /Users/otto/.fetchmailrc

Was übersehe ich bzw. wo liegt mein Fehler ?
 
Ich kenne mich mit launchctl nicht wirklich aus, aber rein aus Interesse: was spricht gegen eine simplen Cron-Job?
 
du hast da noch ACL auf .fetchmailrc, vielleicht die mal checken, ob die das lesen für andere nutzer verhindern.
 
@redrat : Cron = depreciated

@oneOeight:
$ ls -le /Users/otto/.fetchmailrc
-rw----rw-@ 1 otto staff 2086 12 Mai 11:36 /Users/otto/.fetchmailrc
0: user:_spotlight inherited allow read,execute
1: group:everyone allow read,write,execute,delete,append,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown
2: user:eek:tto inherited allow read,write,execute,delete,append,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown
 
hast gerade noch ein o+rw dazu gepackt?
die fetchmail man page sagt bei -f
a named file argument must have permissions no more open than 0700 (u=rwx,g=,o=) or else be /dev/null.
 
@redrat : Cron = depreciated
Wer sagt das? Cron ist doch ein klassischer Unix-Dienst und ich sehe nicht, dass dieser in naher Zukunft abgelöst wird. Würde mich (sowohl privat als auch beruflich) interessieren wer auf die Idee kommt, Cron sei deprecated.
 
Wer sagt das? Cron ist doch ein klassischer Unix-Dienst und ich sehe nicht, dass dieser in naher Zukunft abgelöst wird. Würde mich (sowohl privat als auch beruflich) interessieren wer auf die Idee kommt, Cron sei deprecated.

apple sagt das auf OS X, weil da launchd das ganze übernimmt...
 
Um vielleicht doch noch etwas zur Lösung beizutragen: unter welchem Benutzer Word fetchmail denn durch launchd gestartet? Soll das eventuell ein andere sein? Dann müsstest du in etwa noch folgendes ergänzen:
Code:
<key>UserName</key>
<string>redrat</string>
 
Versuch doch alternativ die XML-Datei noch mal etwas anzupassen. Bin jetzt häufiger über eine etwas andere Syntax gestolpert:
Code:
<key>ProgramArguments</key>
<array>
  <string>/usr/bin/fetchmail</string>
  <string>-f</string>
  <string>/Users/Otto/.fetchmailrc</string>
</array>
 
@redrat: diese Variante geht auch nicht (selbst mit "otto")

Es gibt aber einen Unterschied, ob
<string>/usr/bin/fetchmail</string>
oder
<string>/usr/bin/fetchmail </string>
geschrieben wird (Leerzeichen hinter "fetchmail"):
in Variante 1 kommt ausschliesslich
Exited with code: 3
in Variante 2 kommt:
Job failed to exec(3). Setting up event to tell us when to try again: 2: No such file or directory

Funktioniert aber trotzdem nicht :(
 
leerzeichen dürfen da nicht drin sein.
aber irgendwas scheint mit der übergabe der ProgramArguments nicht zu stimmen.

hast mal ohne probiert?
oder diese geändert?
 
das leerzeichen darf da auch nicht sein...
 
das leerzeichen darf da auch nicht sein...
stimmt, habe es gerade korrigiert:

Ergebnis
$ launchctl list | grep fetch
27243 - 0x7fb12350a5e0.anonymous.fetchmail
- 0 de.otto.fetchmail
Da ich den Launch-Job unter dem User "otto" starte, findet fetchmail automatisch die zugehörigen Einstellungen.
Frag mich trotzdem, wieso "anonymus" verwendet wird (vielleicht ist das ein Hinweis auf die eigentliche Ursache).
.
Allerdings wird der Job auch nur 1x ausgeführt, d.h. die Angabe
<key>StartInterval</key>
<integer>60</integer>
in der XML-Datei wird ignoriert.

Da scheint noch einiges nicht zu stimmen ...
 
du kannst ja auch fetchmail in den daemon mode packen und das interval selber machen lassen...
 
du kannst ja auch fetchmail in den daemon mode packen und das interval selber machen lassen...
Ist zwar nicht Sinn der Optionen, aber: ja das ginge.

Habe jetzt den fetchmail-Parameter "-v" angefügt ("/usr/bin/fetchmail -V") und mit "launchctl" geladen.
Ergebnis: fetchmail wird geladen und schreibt fleißig ins Protokoll --> alles ok.
Füge ich ergänzenderweise "-f" oder "--fetchmailrc" an, gibt es o.g. Fehlermeldungen.
Da auch keine Eintragungen im "fetchmail"-Log vorgenommen werden, bricht der Job schon früher ab.
 
Zurück
Oben Unten