Launchd WatchPaths 不响应更改,只响应已安装的文件和磁盘

Launchd WatchPaths 不响应更改,只响应已安装的文件和磁盘

我在 Macmini 服务器上运行 Snowleopard 10.6.8,我希望此服务器在指定文件夹中插入/编辑或删除文件或文件夹时执行脚本。由于我希望此行为在系统开启(但未登录)时通过网络运行,因此我制作了一个 .plist 脚本,并将其设置为 LaunchDeamon。该 .plist 与我所有其他 .plists 具有相同的权限:“系统:读写。Wheel 和所有人:只读”

作为测试用例,我在 lingon 2.1 的帮助下设置了以下脚本。每当桌面 ( <WatchPaths>) 检测到更改或安装某些内容 ( <StartOnMount>)时,此脚本应执行 growltime.scpt。

<?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.watchfolder.growltime</string>
    <key>ProgramArguments</key>
    <array>
    <string>osascript /Users/admin/growltime.scpt</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StartOnMount</key>
    <true/>
    <key>WatchPaths</key>
    <array>
    <string>/Users/admin/Library/Desktop/</string>
    </array>
</dict>
</plist>

现在奇怪的是,仅当我安装磁盘或安装安装文件时(<StartOnMount>),growltime.scpt 才会运行,但是当在桌面内插入/编辑或删除文件或文件夹时不会运行(<WatchPaths>)。

我在这里做错了什么?

答案1

首先,除非 ProgramArguments 中的每个单词都是一个单独的字符串,否则它根本不起作用。相反,

<key>ProgramArguments</key>
<array>
<string>osascript /Users/admin/growltime.scpt</string>
</array>

它应该是

<key>ProgramArguments</key>
<array>
        <string>osascript</string>
        <string>/Users/admin/growltime.scpt</string>
</array>

您在测试时是否加载了旧版本的代理?可以使用 重新加载属性列表launchctl unload ~/Library/LaunchAgents/$id.plist && launchctl load ~/Library/LaunchAgents/$id.plist

您的桌面路径也有一个错误:

<key>WatchPaths</key>
<array>
<string>/Users/admin/Library/Desktop/</string>
</array>

相关内容