控制macOS的开机启动项

本文共663字。
Copyright: 知识共享署名 非商业性使用 相同方式共享 4.0 国际许可协议 | CC BY-NC-SA 4.0

使用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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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语法是否正确

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