我在 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>