LaunchAgent plist在iCloud中找不到AppleScript的路径

时间:2016-03-09 09:04:16

标签: macos applescript osascript launch-agent

出于某种原因,Dropbox在连线几天后终止(崩溃或退出),没有任何解释。

因此,我开始研究AppleScript在终止时自动重启应用程序的方法。

这让我想到了这个剧本:

repeat
    delay 120 #Run every two minutes
    tell application "System Events"
        if name of every process does not contain "Dropbox" then tell application "Dropbox" to launch
    end tell
    delay 5
end repeat

我还希望脚本在后台运行,因此我为launchctl实现了我自己的Ask Different solution变体。

~/Library/LaunchAgents/中,我使用以下内容创建名为dropbox-keep-alive.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>dropbox-keep-alive.job</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/osascript</string>
        <string>/Users/xxx/Library/Mobile\ Documents/com\~apple\~ScriptEditor2/Documents/dropbox-keep-alive.scpt</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

AppleScript的路径在上面的<array>中给出,.job的{​​{1}}标签在launchutil下分配。

然后我加载<key>

.plist

然后开始吧:

launchctl load -w ~/Library/LaunchAgents/dropbox-keep-alive.plist

为了测试,我退出Dropbox,然后等待2分钟以上,但没有任何反应。

如果我再次尝试launchctl start dropbox-keep-alive.job ,我会收到已经加载的消息。 launchctl load -w没有回复消息。

我知道AppleScript可以正常工作,因为它可以直接使用launchctl start运行它。但是osascript中的某个地方 - 或我.plist的管理层 - 有些东西不起作用。

我已尝试launchctl脚本并重做该过程。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

launchd不会对字符串进行shell样式解析,因此您在脚本路径中的转义将被解释为实际文件名的一部分......并且将无法找到它。看起来应该更像这样:

<key>ProgramArguments</key>
<array>
    <string>/usr/bin/osascript</string>
    <string>/Users/xxx/Library/Mobile Documents/com~apple~ScriptEditor2/Documents/dropbox-keep-alive.scpt</string>
</array>

我不确定这是唯一的问题,但肯定是个问题。如果需要进一步调试,请尝试通过添加以下内容来捕获osascript的错误输出:

<key>StandardErrorPath</key>
<string>/Users/xxx/Library/Logs/dropbox-keep-alive.err</string>

答案 1 :(得分:1)

您要求启动执行的脚本文件位于用户的 / Library 文件夹中。

Launchd无法访问该位置。将其移至 / usr / local / sbin

等文件夹