MacOS Ventura下Launchd定时移文件plist失效(错误78)求助
问题描述
尝试通过Launchd配置plist文件,每10秒执行两条zsh命令,将Apple Books及Dropbox根目录的PDF文件移动至~/dropbox/reading/temp文件夹。相关配置与脚本如下:
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>com.david.pdf</string> <key>ProgramArguments</key> <array> <string>/Users/David/Tools/pdf.txt</string> </array> <key>StartInterval</key> <integer>10</integer> </dict> </plist>
zsh脚本(文件路径/Users/David/Tools/pdf.txt)
#!/bin/zsh mv ~/Library/Mobile\ Documents/iCloud~com~apple~iBooks/Documents/*.pdf ~/dropbox/reading/temp mv ~/dropbox/*.pdf ~/dropbox/reading/temp
脚本在终端运行正常,但通过Launchd执行时报错78,请问哪里配置有误?
问题分析与修复
报错78属于POSIX退出码EX_CANTCREAT,本质是执行脚本时出现路径解析、权限或文件识别问题,具体问题点和修复方案如下:
脚本文件扩展名与执行方式不匹配
你将脚本命名为pdf.txt,虽然终端可以通过zsh调用执行,但Launchd会直接尝试执行该文件,.txt扩展名会导致系统无法识别为可执行脚本。- 修复:将脚本文件名改为
pdf.sh,并同步更新plist中的ProgramArguments路径:<key>ProgramArguments</key> <array> <string>/Users/David/Tools/pdf.sh</string> </array>
- 修复:将脚本文件名改为
脚本未配置可执行权限
Launchd执行脚本时需要文件具备可执行权限,终端运行时可能通过zsh /path/to/script绕开权限检查,但Launchd不会。- 修复:在终端执行以下命令添加权限:
chmod +x /Users/David/Tools/pdf.sh
- 修复:在终端执行以下命令添加权限:
Launchd环境中
~路径解析异常
Launchd的执行环境没有终端的用户级shell环境变量,~无法被正确解析为用户主目录。- 修复:脚本中替换所有
~为绝对路径:#!/bin/zsh mv /Users/David/Library/Mobile\ Documents/iCloud~com~apple~iBooks/Documents/*.pdf /Users/David/dropbox/reading/temp mv /Users/David/dropbox/*.pdf /Users/David/dropbox/reading/temp
- 修复:脚本中替换所有
可选:添加日志便于排查
若后续仍有问题,可在plist中添加日志输出配置,记录执行过程和错误:<key>StandardOutPath</key> <string>/Users/David/Library/Logs/pdf_move.log</string> <key>StandardErrorPath</key> <string>/Users/David/Library/Logs/pdf_move_error.log</string>
内容的提问来源于stack exchange,提问作者David Harris
相关产品推荐
相关产品推荐

