我正在编写一个服务,当我的 Macbook 上的某个文件发生以下变化时执行一个命令在 Mac OS X 上文件更改时运行脚本。
这是我的服务文件(~/Library/LaunchAgents/my-service.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>my-service</string>
<key>OnDemand</key>
<true/>
<key>Program</key>
<string>/Users/<username>/.../onchange.sh</string>
<key>StandardErrorPath</key>
<string>/usr/local/var/log/my-service.error</string>
<key>StandardOutPath</key>
<string>/usr/local/var/log/my-service.log</string>
<key>WatchPaths</key>
<array>
<string>/Users/<username>/.../file-to-monitor.txt</string>
</array>
</dict>
</plist>
然后我启动了我的服务,但失败了,状态为 78。按照https://stackoverflow.com/questions/34215527/what-does-launchd-status-78-mean-why-my-user-agent-not-running,我使用 LaunchControl 进行调试,确实发现了一些与权限相关的错误,并按照应用程序内的说明进行了修复。但即使我卸载并重新加载我的服务后,它仍然失败。
我的脚本onchange.sh
有以下内容:
echo 123;
和许可:
-rwxr--r--@ 1 <username> staff 164 Aug 5 08:43 onchange.sh
但是在重新加载并进行一些更改以触发执行之后,我找不到任何东西my-service.log
。my-service.error
file-to-monitor.txt
我第一次使用 launchd。我做错了什么吗?