• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

[10.13 High Sierra] Problem mit Launchd

Slashwalker

Winterbanana
Registriert
15.05.06
Beiträge
2.213
Hallo
seit dem heutigen Update auf High Sierra funktioniert mein LaunchAgent nicht mehr.
Code:
<?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>AFPmount</string>
        <key>ProgramArguments</key>
        <array>
          <string>/usr/local/bin/nas</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StartInterval</key>
        <integer>10</integer>
<key>StandardOutPath</key>
    <string>/var/log/nas.log</string>
    <key>StandardErrorPath</key>
    <string>/var/log/nas.log</string>
</dict>
</plist>
Dieser soll meine NAS Freigaben beim Start oder nach Netzwerkunterbrechungen neu mounten.
Das Script unter /usr/local/bin funktioniert wenn ich es manuell aufrufe.


EDIT: Unter High Sierra muss die plist wohl root gehören und nicht dem Benutzer :(
 
Zuletzt bearbeitet:
Problem ist erledigt, ja. Aber unter Sierra gehörte die plist definitiv mir und nicht root.
 
Aus dem Daemons and Services Programming Guide:

Daemons and agents that are installed globally must be owned by the root user. Agents installed for the current user must be owned by that user. All daemons and agents must not be group writable or world writable. (That is, they must have file mode set to 600 or 400.)

Ich bin ziemlich sicher, dass das schon immer so war.

War es vorher vielleicht ein User Agent? In welchem Verzeichnis liegt denn die plist? Wurde sie verschoben?
 
Meine plist lag schon immer unter ~/Library/LaunchAgents, also in meinem User Verzeichnis.
 
Dann muss sie laut Doku ja doch deinem User gehören. Wahrscheinlich haben die Berechtigungen aber nicht gepasst - wahrscheinlich die Lese- oder Execute-Berechtigung? Oder die Gruppe? Kann man jetzt wahrscheinlich eh nicht mehr feststellen...
 
Ich hatte die plist mit ditto im Terminal aus dem Time Machine Backup zurückkopiert. Aber egal mit root geht es ja.
 
Die plist verweist nur auf den Daemon/Agent. Sie kann daher durchaus dem Benutzer gehören, obwohl der durch sie gestartete Prozess root gehört. Bitte sauber trennen in der Diskussion.
 
Guter Punkt. Allerdings finde ich im launchd Tutorial (unter Troubleshooting - My job is not loaded on login/boot) folgende Hinweise (relevanter Punkt in fett):
  • Check the job definition has the proper file extension (.plist (Error: Dubious file. Not of type .plist)
  • Check the job definition for wellformedness (Error: no plist was returned for)
    host:~ user$ plutil -lint ~/Library/LaunchAgents/com.example.app.plist /Users/Guest/Library/LaunchAgents/com.example.app.plist: OK
  • Check the Disabled key. Disabled jobs won't be automatically loaded.
  • Check if the job has been disabled in the override database
  • Check the permissions of the job definition. Job definitions have to be readable by the user. Job definitions must not be writable by group or other. Suggested privileges: 0644. (Error: Dubious permissions on file)
  • Check the permissions of the directory containing the job definition. It has to be searchable by the user and must not be writable by group or other. Suggested privileges: 0755
  • Check who owns the job definition. Agents must be owned by their respective user, daemons by root. (Error: Dubious ownership on file)
  • Make sure the Label you provided is unique for this particular launchd instance.
Es scheint also, als ob die Hinweise zur Ownership sich schon auf die plist beziehen und die Begriffe Daemon und User Agent synonym für die jeweiligen plist-Dateien verwendet werden. Was zugegebenermaßen aber in der Dokumentation nicht 100% klar definiert wird. Was die App oder das Script angeht, das ausgeführt wird, kommt es vermutlich auch darauf an, unter welchem User es ausgeführt werden soll (was ja in der plist konfigurierbar ist).

Oder hast du andere Erkenntnisse? Fände ich interessant zu hören!