Skip to content

控制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