在Mac OS High Sierra上通过launchd设置Parse Server开机自启
我来一步步教你用launchd和launchctl配置Parse Server及Parse Dashboard的开机自启,毕竟launchd的配置细节确实容易让人懵,尤其是第一次接触的时候。咱们一步步来:
一、先确认关键路径
在开始写配置文件前,先把几个核心路径搞清楚,避免后续踩坑:
- 你的Parse Server项目根目录:比如
/Users/xxx/parse-server(把xxx换成你的Mac用户名) npm的绝对路径:打开终端执行which npm,会输出类似/usr/local/bin/npm或者/Users/xxx/.nvm/versions/node/v16.13.0/bin/npm,记下来- Parse Dashboard的启动方式:如果是全局安装的,执行
which parse-dashboard拿到路径;如果是本地安装在Parse Server项目里,启动命令就是node node_modules/parse-dashboard/bin/parse-dashboard,对应的node路径也用which node查一下
二、配置Parse Server的launchd plist文件
launchd用plist文件定义服务,咱们在用户目录的LaunchAgents文件夹里创建配置(这个目录的服务是当前用户启动的,比系统级的/Library/LaunchDaemons更适合):
- 打开终端,创建并编辑plist文件:
nano ~/Library/LaunchAgents/com.yourname.parse-server.plist
(把yourname换成你的名字或者自定义标识,比如com.pm200107.parse-server,保证唯一就行)
- 把下面的内容粘贴进去,记得替换所有带
xxx的路径为你自己的实际路径:
<?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.yourname.parse-server</string> <!-- 启动命令,按顺序写参数 --> <key>ProgramArguments</key> <array> <string>/usr/local/bin/npm</string> <!-- 这里替换成你查到的npm绝对路径 --> <string>start</string> <string>--</string> <string>/Users/xxx/parse-server/config/config.json</string> <!-- 你的config.json绝对路径 --> </array> <!-- Parse Server的项目根目录,npm start需要在这个目录执行 --> <key>WorkingDirectory</key> <string>/Users/xxx/parse-server</string> <!-- 替换成你的项目根目录 --> <!-- 开机时自动加载 --> <key>RunAtLoad</key> <true/> <!-- 如果进程崩溃,自动重启 --> <key>KeepAlive</key> <true/> <!-- 标准输出日志,方便排查问题 --> <key>StandardOutPath</key> <string>/Users/xxx/Library/Logs/parse-server.out.log</string> <!-- 错误日志 --> <key>StandardErrorPath</key> <string>/Users/xxx/Library/Logs/parse-server.err.log</string> </dict> </plist>
保存退出:按
Ctrl+O,回车确认,再按Ctrl+X退出nano。给plist文件设置正确的权限(launchd对权限有要求):
chmod 644 ~/Library/LaunchAgents/com.yourname.parse-server.plist
三、配置Parse Dashboard的launchd plist文件
和Parse Server的逻辑几乎一样,咱们再弄Dashboard的配置:
- 创建并编辑plist文件:
nano ~/Library/LaunchAgents/com.yourname.parse-dashboard.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.yourname.parse-dashboard</string> <key>ProgramArguments</key> <array> <!-- 两种情况选一种: --> <!-- 情况1:全局安装的Dashboard,用parse-dashboard命令 --> <string>/usr/local/bin/parse-dashboard</string> <string>--config</string> <string>/Users/xxx/parse-dashboard/config.json</string> <!-- 你的Dashboard配置文件路径 --> <!-- 情况2:本地安装在Parse Server里的,用node启动 --> <!-- <string>/usr/local/bin/node</string> --> <!-- <string>/Users/xxx/parse-server/node_modules/parse-dashboard/bin/parse-dashboard</string> --> <!-- <string>--config</string> --> <!-- <string>/Users/xxx/parse-server/dashboard-config.json</string> --> </array> <!-- Dashboard的工作目录,如果是本地安装就写Parse Server根目录,全局的话可以写你的用户目录 --> <key>WorkingDirectory</key> <string>/Users/xxx/parse-server</string> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> <key>StandardOutPath</key> <string>/Users/xxx/Library/Logs/parse-dashboard.out.log</string> <key>StandardErrorPath</key> <string>/Users/xxx/Library/Logs/parse-dashboard.err.log</string> </dict> </plist>
- 保存退出后同样设置权限:
chmod 644 ~/Library/LaunchAgents/com.yourname.parse-dashboard.plist
四、加载并启用服务
现在把配置加载到launchd里,设置开机自启:
- 加载Parse Server的服务:
launchctl load ~/Library/LaunchAgents/com.yourname.parse-server.plist
如果提示“Service is already loaded”,可以先卸载再加载:launchctl unload ~/Library/LaunchAgents/com.yourname.parse-server.plist
- 设置开机自启(High Sierra及以后的系统需要这一步,确保重启后生效):
launchctl enable gui/$(id -u)/com.yourname.parse-server
$(id -u)会自动获取你的用户ID,不用手动输入。
- 立即启动Parse Server(不用等重启验证):
launchctl start com.yourname.parse-server
- 对Parse Dashboard重复上面3步:
launchctl load ~/Library/LaunchAgents/com.yourname.parse-dashboard.plist launchctl enable gui/$(id -u)/com.yourname.parse-dashboard launchctl start com.yourname.parse-dashboard
五、验证和调试
如果遇到启动失败,别慌,按下面的步骤排查:
- 检查服务是否在运行:执行
launchctl list | grep parse,如果能看到你的服务名称,说明已经加载;如果PID列有数字,说明进程在运行 - 查看日志:用
tail -f /Users/xxx/Library/Logs/parse-server.err.log看错误日志,大部分问题都能在这里找到原因(比如路径写错、权限不足) - 检查plist语法:执行
plutil -lint ~/Library/LaunchAgents/com.yourname.parse-server.plist,如果输出OK说明语法没问题,否则会提示哪里错了 - 注意环境变量:如果你的npm是用nvm安装的,launchd的环境变量和终端不一样,可能找不到node/npm,这时候直接用node的绝对路径(比如
/Users/xxx/.nvm/versions/node/v16.13.0/bin/node)代替npm来启动,比如把Parse Server的ProgramArguments改成:<array> <string>/Users/xxx/.nvm/versions/node/v16.13.0/bin/node</string> <string>/Users/xxx/parse-server/index.js</string> <string>--config</string> <string>/Users/xxx/parse-server/config/config.json</string> </array>
内容的提问来源于stack exchange,提问作者pm200107
相关产品推荐
相关产品推荐

