我编写了一个小型LaunchAgent来监视更改文件夹并在发生更改时触发shell脚本:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.myusername.w2</string>
<key>ProgramArguments</key>
<array>
<string>/Users/myusername/Desktop/alert</string>
</array>
<key>WatchPaths</key>
<array>
<string>/Users/myusername/Personnel</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>/Users/myusername</string>
<key>StandardErrorPath</key>
<string>myjob.log</string>
<key>StandardOutPath</key>
<string>myjob.log</string>
<key>Debug</key>
<true/>
<key>WaitForDebugger</key>
<true/>
</dict>
</plist>
尽管它没有按预期工作:我在监视文件夹中添加了一个文件,但脚本没有被触发。
是否创建了日志文件但是为空(没有错误?)
如果有人能指出正确的方向,那就太棒了。
答案 0 :(得分:0)
要检查两件事:
删除“WaitForDebugger”键。 (至少,删除它允许我做一个有效的测试。显然,它有一个目的,但我无法建议如何将调试器附加到您的过程。)
确保/Users/myusername/Desktop/alert
可执行(chmod +x /Users/myusername/Desktop/alert
)
答案 1 :(得分:0)
由于RunAtLoad
选项设置为true
,因此您的脚本会在您登录后立即启动。你说你在launchctl list
输出中看到了一个PID。这意味着对于launchd,代理已经在运行,无需再次运行它。
我建议删除RunAtLoad
密钥或使/Users/myusername/Desktop/alert
脚本快速退出。您将在-
输出的PID列中看到launchctl list
符号。