背景
在服务器开发领域,如果我们将自己的 Mac 电脑做为远程服务器,我们需要其开机能自启动一些脚本,以便运行一些服务。如开启 frp 服务。
实现方式
Mac 官方提供了实现方式,链接。总结起来两种方式 “daemon” 和 “agent” 。在实现前需要先了解一下 Mac 的服务启动顺序,如下(官方介绍):

整体的服务分为如下两个 Session 阶段。
- Startup Session 阶段启动系统服务,这个阶段不需要用户登录。尤其是一些后台的脚本,适合放在这里执行。如想在这个阶段执行脚本,那需要将 plist 文件放在 /System/Library/LaunchDaemons/ (操作系统级别的服务程序)或 /Library/LaunchDaemons/ (本机全局级别的服务程序,提议放在本目录)。
- Login Session 阶段启动,这个阶段有个前提是需要用户登录。如果用户不登录是不会执行这个阶段的脚本,只有用户成功登录后才会执行这个脚本。这个阶段的比较适合放那些登录后需要打开的软件。如果想在这个阶段执行脚本,那需要将 plist 文件放在 ~/Library/LaunchAgents 这个目录下。
开机自启动 frp 脚本
由于本文将 frp 做为服务器,所以我们将 plist 文件放在 /Library/LaunchDaemons/ 这个目录下,这样无论什么时候开机或者重启,都会执行。进入 /Library/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>org.popkit</string>
<key>ProgramArguments</key>
<array>
<string>/Users/aborn/init.sh</string>
</array>
<key>StandardOutPath</key>
<string>/var/log/popkit.log</string>
<key>StandardErrorPath</key>
<string>/var/log/popkit.log</string>
<key>Debug</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
我的 /Library/LaunchDaemons/ 目录下文件名为 org.popkit.plist

如果没有编辑权限,可能需要切换到 root 用户,使用如下命令:
sudo -i
具体 plist 文件如何写可参考官方文档,这里需要注意以下几点:
- 使用脚本的全路径,如 /Users/aborn/init.sh 这是我脚本的全路径。
- 注意给 init.sh 脚本加可执行权限。
- 可以增加 standardOutPath 和 StandardErrorPath 这两个日志路径,以便查看启动脚本的输出日志。
我的 frp 启动脚本 如下:
#!/bin/sh
/Users/aborn/software/frp/frpc -c /Users/aborn/software/frp/frpc.toml
© 版权声明
文章版权归作者所有,未经允许请勿转载。如内容涉嫌侵权,请在本页底部进入<联系我们>进行举报投诉!
THE END
















暂无评论内容