Launchd PLIST не работает - PullRequest
       37

Launchd PLIST не работает

2 голосов
/ 06 августа 2009

Я пытаюсь запустить Applescript внутри launchd 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>Label</key>
<string>com.pf.Testing</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/osascript</string>
<string>-e</string>
<string>'tell application "Finder"' -e  'set didQuit to (path to home folder as string) &amp; ".myApp"' -e 'if (exists file didQuit) then' -e 'tell application "TestApp"' -e 'activate' -e 'end tell' -e 'end if' -e 'end tell'</string>
</array>
<key>StartInterval</key>
<integer>20</integer>
<key>RunAtLoad</key>
<true/>
</dict>
</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>Label</key>
<string>com.pf.Testing</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/osascript</string>
<string>-e</string>
<string>'tell application "Finder"'</string>
<string>-e</string>
<string>'set didQuit to (path to home folder as string) &amp; ".myApp"'</string>
<string>-e</string>
<string>'if (exists file didQuit) then'</string>
<string>-e</string>
<string>'tell application "TestApp"'</string>
<string>-e</string>
<string>'activate'</string>
<string>-e</string>
<string>'end tell'</string>
<string>-e</string>
<string>'end if'</string>
<string>-e</string>
<string>'end tell'</string>
</array>
<key>StandardErrorPath</key>
<string>/Users/pf/Desktop/Problem.log</string>
<key>StartInterval</key>
<integer>20</integer>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>

Ответы [ 2 ]

1 голос
/ 14 августа 2009

Я думаю, вам нужно разбить ваш последний аргумент на отдельные аргументы - каждый аргумент (-e и отдельные строки AppleScript) должен быть в отдельном элементе <string />. Либо так, либо, как говорит Ник, просто передайте файл .applescript со всем сценарием.

Проблема в том, что ваша команда интерпретируется как:

/usr/bin/osascript -e '\'tell application "Finder"\' -e  \'set didQuit to (path to home folder as string) & ".myApp"\' -e \'if (exists file didQuit) then\' -e \'tell application "TestApp"\' -e \'activate\' -e \'end tell\' -e \'end if\' -e \'end tell\''

это не то, что вы имели в виду.

1 голос
/ 12 августа 2009

Вероятная проблема заключается в том, что launchd не выполняет ваш AppleScript в контексте графического интерфейса пользователя, вошедшего в систему, и поэтому AppleScript не может общаться с Finder.

Убедитесь, что plist установлен как LaunchAgent, а не как LaunchDaemon (список должен находиться в / Library / LauchAgents или ~ / Library / LaunchAgents).

Попробуйте добавить следующее в plist, чтобы скрипт работал в контексте GUI:

<key>LimitLoadToSessionType</key>
<string>Aqua</string>

Обратите внимание, что это будет работать надежно только на 10,5 и выше; Мне не удалось настроить корректную работу LaunchAgents на 10.4 для каждого пользователя.

...