launchctl lädt plist nicht, plutil sagt okay

malah

malah

Aktives Mitglied
Thread Starter
Dabei seit
17.02.2005
Beiträge
352
Reaktionspunkte
8
Hallo, ich habe ein Bash-Skript geschrieben, dass per rsync meinen Benutzerordner über Internet auf einem Server speichert. Das Skript soll stündlich ausgeführt werden, gesteuert von launchd. Dazu habe ich die folgende plist gebastelt, die unter /Library/LaunchDaemons liegt.

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>com.benutzername.backup.plist</string>
    <key>ProgramArguments</key>
    <array>
     <string>sh</string>
     <string>-c</string>
     <string>/Users/benutzername/Library/Scripts/backup_scripts/backup_benutzername_server</string>
     <key>KeepAlive</key>
     </array>
     <key>StartInterval</key>
     <integer>3600</integer>
     <key>StandardErrorPath</key>
     <string>/tmp/benutzername_backup.err</string>
     <key>StandardOutPath</key>
     <string>/tmp/benutzername_backup.out</string>
  </dict>
</plist>

Dateiname: com.pollux.backup.plist
Benutzerrechte: -rw-r--r--@ 1 root wheel 694 3 Apr 19:57 com.pollux.backup.plist
Fehlermeldung: /Library/LaunchDaemons/com.pollux.backup.plist: Invalid property list

plutil sagt, dass die plist ok ist:
LaunchDaemons pollux$ plutil com.pollux.backup.plist
com.pollux.backup.plist: OK
Ein Test mit xmllint gibt einfach nur den Inhalt der plist aus, ohne Fehlermeldung.

Das Betriebssystem ist High Sierra. Da das Skript und die plist auf dem Rechner meiner Frau unter Mavericks nach anfänglichen Schwierigkeiten laufen, hatte ich den Verdacht, es könnte an dem zwischenzeitlich eingeführten SIP liegen. Aber auch nachdem ich das deaktiviert habe, wird die plist nicht geladen.
LaunchDaemons pollux$ csrutil status
System Integrity Protection status: disabled.
Hat jemand eine Idee, was ich noch probieren könnte?
 
/bin/sh

genauso jeweils im backupscript oder du setzt ein passendes environment.
 
Ergänzung: Wenn ich das Skript händisch starte, läuft es problemlos. Und – wie bereits erwähnt – auf dem Rechner meiner Frau funktioniert es auch mit der plist.
 
da wo jetzt sh steht.
Das war es nicht. KeepAlive stand an der falschen stelle und es fehlte ein <true/>. So funktioniert es jetzt:

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>com.pollux.backup.plist</string>
   <key>ProgramArguments</key>
   <array>
    <string>sh</string>
    <string>-c</string>
    <string>/bin/backup_pollux_server</string>   
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>StartInterval</key>
    <integer>3600</integer>
    <key>StandardErrorPath</key>
    <string>/tmp/pollux_backup.err</string>
    <key>StandardOutPath</key>
    <string>/tmp/pollux_backup.out</string>
  </dict>
</plist>
 
  • Gefällt mir
Reaktionen: mausfang
warum machst du überhaupt das sh in die plist und nicht als shebang in das script?
 
Zurück
Oben Unten