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?