Ich habe die standardmäßige org.postfix.master.plist von postfix so geändert, dass sie als Daemon läuft , sodass sie mir eine E-Mail senden kann, wenn ein lokaler Benutzer eine E-Mail erhält.
Standard:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.postfix.master</string>
<key>Program</key>
<string>/usr/libexec/postfix/master</string>
<key>ProgramArguments</key>
<array>
<string>master</string>
<string>-e</string>
<string>60</string>
</array>
<key>QueueDirectories</key>
<array>
<string>/var/spool/postfix/maildrop</string>
</array>
<key>AbandonProcessGroup</key>
<true/>
</dict>
</plist>
Geändert:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>org.postfix.master</string>
<key>Program</key>
<string>/usr/libexec/postfix/master</string>
<key>ProgramArguments</key>
<array>
<string>master</string>
</array>
<key>QueueDirectories</key>
<array>
<string>/var/spool/postfix/maildrop</string>
</array>
<key>AbandonProcessGroup</key>
<true/>
</dict>
</plist>
Diese Datei ist jedoch unter /System/Library/LaunchDaemons/
, also musste ich SIP vorübergehend deaktivieren, um die Datei zu ändern. Ich habe gelesen, dass nach dem nächsten OS-Update alle meine Änderungen wegen SIP weg sein werden. Was kann ich tun, damit das dauerhaft wird? Kann ich meinen Launch Daemon /Library/LaunchDaemons
als zweiten unterstellen?
Ich musste mich noch nicht "wirklich" damit befassen, aber ich denke, die beste Lösung ist:
Label
Wert entsprechend an. Wenn Sie dies nicht ändern, wird launchd wahrscheinlich zwischen diesem und dem Original verwechselt.sudo launchctl unload -w /System/Library/LaunchDaemons/org.postfix.master.plist
(das -w
macht es dauerhaft).sudo launchctl load /Library/LaunchDaemons/local.org.postfix.master.plist
(oder starten Sie einfach neu).Übrigens, wenn Sie SIP einfach deaktivieren und die vorhandene Datei ändern, wird sie nicht unbedingt durch ein Betriebssystem-Update zurückgesetzt. Aber es könnte sein , und Sie müssten nach jedem Update (einschließlich Sicherheitsupdates usw.) nachsehen, was mühsam ist.
Ich hatte ein ähnliches Problem, und das oben Gesagte hat es für mich nicht behoben. Ich teile mein Mitnehmen, wenn es jemals jemandem etwas Zeit sparen kann (ich habe ein paar Stunden damit gekämpft)
Tldr: Ich musste meine plist als root ausführen
In meinem Fall wurde die plist korrekt vom Terminal geladen:
sudo launchctl load /Library/LaunchAgents/com.name.of.the.plist
Aber nach Neustart des Rechners nicht mehr. Übrigens können Sie überprüfen, ob Ihre Plist mit Folgendem geladen ist:
sudo launchctl list | grep "my.plist"
Ich habe genau den Fehler beim Hinzufügen von Protokollen gesehen:
<key>StandardErrorPath</key>
<string>/Users/XXX/err.log</string>
<key>StandardOutPath</key>
<string>/Users/XXX/out.log</string>
Es zeigte sich diese Fehlermeldung:
sysadminctl[807:9587] sysadminctl should be run as root, or in interactive mode!
Ich dachte wirklich, mein Skript wurde bereits als root ausgeführt (weil ich in war /Library/LaunchAgents/
), aber das war nicht der Fall, und mein Skript bekam ein Berechtigungsproblem!
Nun, um die plist als root auszuführen:
/Library/LaunchAgents/
nach/Library/LaunchDaemons/
UserName
Schlüssel wie folgt hinzu:<key>UserName</key>
<string>root</string>
In meinem Fall hat es gut funktioniert!
benjaminvonderweiden
Label
Werts ist in der Tat wichtig. Andernfalls startet der Daemon nicht.