控制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文件
1 | sudo vim /Library/LaunchDaemons/frpc.plist # 此目录需要超级管理员权限 |
写入以下xml
1 | <?xml version="1.0" encoding="UTF-8"?> |
检查plist语法是否正确
1 | plutil /Library/LaunchDaemons/frpc.plist |
修改文件权限
1 | chmod 644 /Library/LaunchDaemons/frpc.plist |
添加自启动项
1 | launchctl load /Library/LaunchDaemons/frpc.plist |
启动自启动项
1 | launchctl start frpc |
删除自启动项
1 | launchctl unload /Library/LaunchDaemons/frpc.plist |
查看当前所有自启动项
1 | launchctl list |