You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS重启后无法自动执行Shell脚本的问题解决方法

macOS launchd启动脚本失效故障解决方案

现有配置的核心错误

你当前的配置存在多个直接导致加载失败的问题:

  • plist存在XML语法错误:多处</string>闭合标签误写为</strings(多了尾部s、缺失闭合尖括号);DOCTYPE声明使用了中文弯引号,DTD地址中的数字1误写为小写l,XML解析直接失败
  • 配置逻辑冲突:同时设置LaunchOnlyOnce和KeepAlive两个语义互斥的参数,launchd加载时会出现行为异常
  • 存放路径错误:/Library/LaunchDaemons下的服务为系统级守护进程,运行于用户登录前的无GUI会话上下文,无权限执行open命令调起图形化应用,必然触发10810错误
  • 脚本路径不严谨:脚本内使用相对路径调用app,launchd运行时的工作目录和环境变量和你手动打开终端时不一致,会找不到目标文件
  • 登录项配置方式错误:将plist/sh文件直接加入登录项时,系统默认按普通文件打开,不会按launchd规则解析执行,因此只会打开脚本文件不会运行内部命令

分步修复方案

1. 修正Shell脚本

  • 打开/usr/local/bin/rwm.sh,将其中的open filename.app替换为目标应用的绝对路径,例如应用存放在应用程序目录时写为open /Applications/你的目标程序.app,禁止使用相对路径
  • 终端执行命令给脚本添加可执行权限:
chmod +x /usr/local/bin/rwm.sh
  • 手动执行脚本验证可用性:/usr/local/bin/rwm.sh,确认目标app可以正常启动后再进行下一步

2. 编写正确的plist文件

删除原有错误的plist文件,在~/Library/LaunchAgents/路径下新建com.start.activity.plist(单用户生效放该路径即可,需要所有用户登录生效则放/Library/LaunchAgents/,绝对不要放LaunchDaemons目录),写入以下内容:

<?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.start.activity</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>
        <string>/usr/local/bin/rwm.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardOutPath</key>
    <string>/tmp/rwm_launch.log</string>
    <key>StandardErrorPath</key>
    <string>/tmp/rwm_launch_err.log</string>
</dict>
</plist>

配置说明:移除了冲突的LaunchOnlyOnce、KeepAlive参数;所有可执行文件使用绝对路径,避免环境变量导致的找不到命令问题;新增日志输出路径,方便后续排查问题

3. 加载并验证服务

终端依次执行以下命令:

  1. 卸载之前错误加载的同名服务,避免冲突:
launchctl unload ~/Library/LaunchAgents/com.start.activity.plist
  1. 修正plist文件权限:
chmod 644 ~/Library/LaunchAgents/com.start.activity.plist
  1. 重新加载服务:
launchctl load ~/Library/LaunchAgents/com.start.activity.plist
  1. 无需重启,立即测试服务运行状态:
launchctl start com.start.activity

执行后如果目标app正常启动,说明配置生效,重启后会自动运行。如果未启动,直接查看/tmp/rwm_launch_err.log中的错误日志定位问题即可。


常见问题补充

  • lsopenurlswithrole() failed 10810错误触发原因:要么是目标app路径填写错误,要么是执行open命令的上下文无GUI访问权限(比如在LaunchDaemon、SSH远程会话中执行该命令就会稳定复现该错误)
  • 不要将.plist或.sh脚本直接加入登录项:该方式不会触发launchd的服务加载逻辑,系统只会调用默认的文本编辑器/脚本编辑器打开对应文件,不会执行内部逻辑

内容的提问来源于stack exchange,提问作者Trimantra Software Solution

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 03:03:39