Ich habe ein plist Legt fest, dass sie in einem festgelegten Intervall ausgeführt wird, und haben es in / Library / LaunchDaemons wie folgt abgelegt
/Library/LaunchDaemons $ ll macports_update_notifier.plist
lrwxr-xr-x 1 root wheel 55B 5 Sep 13:47 macports_update_notifier.plist@ -> /Users/seron/bin/macports/macports_update_notifier.plist
Das Problem ist, dass es nicht ausgeführt wird. Hier ist die plist:
<?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>EnvironmentVariables</key>
<dict>
<key>HOME</key>
<string>/Users/seron</string>
</dict>
<key>Label</key>
<string>macports_update_notifier</string>
<key>ProgramArguments</key>
<array>
<string>/Users/seron/bin/macports/macports_notificaton.sh</string>
</array>
<key>StartInterval</key>
<integer>300</integer>
</dict>
</plist>
Ich habe es mit geladen sudo launchctl load -w /Library/LaunchDaemons/macports_update_notifier.plist.
Hier ist was sudo launchctl list macports_update_notifier produziert:
{
"Label" = "macports_update_notifier";
"LimitLoadToSessionType" = "System";
"OnDemand" = true;
"LastExitStatus" = 0;
"TimeOut" = 30;
"ProgramArguments" = (
"/Users/seron/bin/macports/macports_notificaton.sh";
);
};
Das Skript wird in etwa einer Sekunde ausgeführt und funktioniert gut, wenn es eigenständig ausgeführt wird. Es muss als root laufen.
Ich verwende OS X 10.8.1. Was könnte das Problem sein?
bearbeiten:
Mein Skript läuft Terminalbenachrichtigung Dies ist ein Befehlszeilentool zum Anzeigen von Benachrichtigungen in Mountain Lion. Hier setzt der Dämon an.
#!/bin/sh
/opt/local/bin/terminal-notifier -message 'output' -group 'debug'
Ich habe festgestellt, dass der Daemon einwandfrei läuft, wenn er nicht geladen wird sudo. Ein Unterschied ist das launchctl load test.plist Berichte "LimitLoadToSessionType" = "Aqua" anstatt "System". Wenn ich aber setze LimitLoadToSessionType zu Aqua in der plist und laden mit sudo launchctl weigert sich, es zu laden nothing found to load. Es muss jedoch als root ausgeführt werden, da es die macports-Datenbank aktualisiert.
aktualisieren
Ich glaube, ich habe den Grund gefunden, warum eine GUI nicht von einem Dämon gestartet werden kann. Mac Developer Library, Daemons und Agenten . Ein Agent kann das tun. In meinem Fall muss er mit dem Daemon kommunizieren, um Informationen anzuzeigen, wenn der Daemon macports aktualisiert hat. Nun stellt sich die Frage: Wie kann ich den Agenten fragen lassen und der Dämon antworten?
terminal-notifier funktioniert nicht, wenn ein anderer Benutzer als der aktuell angemeldete Benutzer ausgeführt wird. Ruft an terminal-notifier mit sudo in einer interaktiven Shell-Arbeit ok?
terminal-notifier mit dem vollständigen Pfad in Ihrem Skript?