控制macOS的开机启动项
使用launchctl工具添加启动项
从OS X 10.4 Tiger开始,Apple要求开发者使用launch daemons and agents配置自启动项,launch daemons和launch agents由launchd进程管理。launchd是macOS下用于初始化系统环境的关键进程,它是内核装载成功之后在OS环境下启动的第一个进程。采用这种方式来配置自启动项只需要一个plist文件,该plist文件存在于以下目录,各目录决定了其启动的先后和拥有的权限:
~/Library/LaunchAgents # 特定用户登录后以当前用户启动,第三方程序一般都放这里
/Library/LaunchAgents # 任一用户登录后以当前用户启动,管理员使用
/System/Library/LaunchAgents # 系统组件,任一用户登录后以当前用户启动
/Library/LaunchDaemons # 系统装载时以root用户启动,管理员使用
/System/Library/LaunchDaemons # 系统组件,系统装载时以root用户启动
目录区别:
/System/Library # 存放Apple开发的系统组件。
/Library # 存放系统管理员安装的程序。
~/Library # 存放普通用户安装的程序。
launch daemon和launch agents区别: 它们本质上都是守护进程,launch daemons在系统装载时启动,属于所有用户;launch agents是某个用户拥有的程序,在这个用户登录后启动。
以frpc为例
准备好frpc的二进制文件frpc
与配置文件frpc.ini
。
一般情况下,在终端执行./frpc -c frpc.ini
即可启动frpc,但是我们想在开机启动此进程供远程使用,需要设置开机启动。
我们希望在系统启动之后,用户登陆之前(输入密码前)便启动frpc,则需要将启动配置放入/Library/LaunchDaemons/
目录下。
创建plist文件
sudo vim /Library/LaunchDaemons/frpc.plist # 此目录需要超级管理员权限
写入以下xml
<?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>frpc</string>
<key>ProgramArguments</key>
<array>
<string>/Users/f/Frpc/frpc</string>
<string>-c</string>
<string>/Users/f/Frpc/frpc.ini</string>
</array>
<key>KeepAlive</key>
<true/>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
检查plist语法是否正确
plutil /Library/LaunchDaemons/frpc.plist
修改文件权限
chmod 644 /Library/LaunchDaemons/frpc.plist
添加自启动项
launchctl load /Library/LaunchDaemons/frpc.plist
启动自启动项
launchctl start frpc
删除自启动项
launchctl unload /Library/LaunchDaemons/frpc.plist
查看当前所有自启动项
launchctl list