我有一个 rsync2server 脚本,从 zsh 运行时可以完成。
现在我正在尝试让它在晚上当我的 MacBook Air m2 2023 Ventura 正在睡觉时运行。
首先我创建了一个 plist 来执行脚本:
pat@Pats-MacBook-Air scripts % cat ~/Library/LaunchAgents/pat.rsync2server.plist
<?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>pat.rsync2server.plist</string>
<key>StandardErrorPath</key>
<string>/Users/pat/Documents/scripts/stderr.log</string>
<key>StandardOutPath</key>
<string>/Users/pat/Documents/scripts/stdout.log</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string><![CDATA[/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin]]></string>
</dict>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>-c</string>
<string>/Users/pat/Documents/scripts/rsync2server.sh</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>10</integer>
<key>Minute</key>
<integer>55</integer>
</dict>
</dict>
</plist>
时间是未来几分钟,所以它会在我观看时执行。
执行后我得到stderr.log:
pat@Pats-MacBook-Air scripts % cat stderr.log
/bin/sh: /Users/pat/Documents/scripts/rsync2server.sh: Operation not permitted
如果我从终端执行:
pat@Pats-MacBook-Air scripts % /bin/sh /Users/pat/Documents/scripts/rsync2server.sh
一切正常。
我的路径有问题吗?我不熟悉 ~/Library/LaunchAgent launchd 和 plist 运行时使用的环境。
我用
加载plistpat@Pats-MacBook-Air scripts % launchctl load -w ~/Library/LaunchAgents/pat.rsync2server.plist
尝试使用guid用户(与shell上使用的相同),也许是rsync的权限。
通过以下方式获取:id -u [用户名]
将文件加载到系统上
sudo launchctl bootstrap gui/501 /Library/LaunchAgents/pat.rsync2server.plist
如果您更改文件,请尝试使用以下命令卸载:
sudo launchctl bootout gui/501 ~/Library..