macOS开机启动项设置

news/2024/10/18 22:31:36/

1. 概述

macOS开机启动项与其他类Unix比较麻烦,Linux配置rc.local文件即可。

macOS系统上开机启动这个叫法不准确,应该叫“自启动”或则“登录时启动”。
macOS上启动项可分为登录项(Login Items)和启动项(Startup Items):

  • Login Items在用户登录后立即启动并一直运行,直到用户退出登录或者手动终止才会停止运行;
  • Startup items在系统装载的最后阶段启动,苹果官方不再推荐使用。

 

2. macOS启动项管理

2.1 使用登录项添加自启动项

这种方式支持有用户界面的程序。
进入:设置–> 用户与群组–>登录项,点击+号找到想自动启动的软件,选择后确定即可。
删除启动项,点击 - 号删除即可。

 

2.2 使用launchctl工具添加启动项

从OS X 10.4 Tiger开始,Apple要求开发者使用launch daemons and agents配置自启动项,launch daemons和launch agents由launchd进程管理。launch是macOS下用于初始化系统环境的关键进程,它是内核装载成功之后在OS环境下启动的第一个进程。采用这种方式来配置自启动项只需要一个plist文件,该plist文件存在以下目录,各目录决定了其启动的先后和拥有的权限:

~/Library/LaunchAgents //特定用户登录以后以当前用户运行,第三方程序一般都放这里;
/Library/LaunchAgents //任一用户登录后以当前用户启动,管理员使用;
/System/Library/LaunchAgents //系统组件,任一用户登录后以当前用户启动
/Library/LaunchDaemons // 系统装载时以root用户启动,管理员使用
/System/Library/LaunchDaemons //系统组建,系统装载时以root用户启动


(跟上面的一样,只是分组的方式不一样,便于理解)

/Library/LaunchDaemons: 系统启动时运行,用户不登录也会运行
/Library/LaunchAgents: 用户登录后运行
~/Library/LaunchAgents: 用户自定义的用户启动项
/System/Library/LaunchDaemons: 系统自带的启动项
/System/Library/LaunchAgents: 系统自带的启动项

 

2.3 各目录区别

/System/Library //存放Apple开发的系统组件
/Library //存放系统管理员安装的程序
~/Library //存放普通用户安装的程序

 

2.4 launch daemons和launch agents区别

它们本质上都是守护进程,launch daemons在系统装载时启动,属于所有用户;launch agents是某个用户拥有的程序,在这个用户登录后启动。

 

3. plist文件

每个.plist文件中,有3个属性控制着是否会开机自启动。

  • KeepAlive: 决定程序是否需要一直运行,如果是false则需要才启动,默认false;
  • RunAtLoad: 开机时是否运行,默认为false;
  • SuccessfulExit: 此项为true时,程序正常退出时重启(即退出码为0);为false时,程序非正常退出时重启。此项设置时会隐含默认RunAtLoad = true,因为程序需要至少运行一次才能获得退出状态。

所以其实针对这三项,不同的值有不同的表现:

  • 如果KeepAlive = false
    当RunAtLoad = false时,程序只有在有需要的时候运行。
    当RunAtLoad = true时,程序在启动时会运行一次,然后等待在有需要的时候运行。
    当SuccessfulExit = true / false时,不论RunAtLoad值是什么,都会在启动时运行一次。气候根据SuccessfulExit值来决定是否重启。
  • 如果KeepAlive = true
    不论RunAtLoad/SuccessfulExit值是什么,都会启动时运行且一直保持运行状态。如果不希望开机自启动运行,则需要:
    1. 找到对应程序的plist文件;
    2. 删除SuccessfulExit属性;
    3. 将RunAtLoad / KeepAlive均设为 <false/>

 

4. 创建plist

vim ~/Library/LaunchAgents/aria2.plist
写入以下xml
<?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>KeepAlive</key><true/><key>RunAtLoad</key><true/><key>Label</key><string>aria2</string><key>ProgramArguments</key><array><string>/usr/local/bin/aria2c</string><string>-D</string></array><key>WorkingDirectory</key><string>/Users/Roy/Downloads</string></dict>
</plist>

 

检查plist语法是否正确

plutil ~/Library/LaunchAgents/aria2.plist

 

修改文件权限

chmod 644 ~/Library/LaunchAgents/aria2.plist

 

添加启动项

//launchctl 工具提供了一系列接口方便launchd程序
launchctl load ~/Library/LaunchAgents/aria2.plist

 

启动自启动项

launchctl start aria2

 

删除自启动项

launchctl unload ~/Library/LaunchAgents/aria2.plist

 

查看当前所有自启动项

launchctl list

 

5. Homebrew安装的程序可使用Homebrew Service设置开机启动

5.1 设置开机启动

brew service start mysql //如果Homebrew安装了mysql;

 

5.2 只运行,不开机启动

brew service run mysql

 

5.3 停止运行不再开机启动(待验证)

brew service stop mysql

Homebrew安装的程序不全都支持这种方式,如果命令执行失败,需要手动设置plist文件,使用launchctl工具添加启动项。


http://www.ppmy.cn/news/581887.html

相关文章

计算机软件自启动设置,设置开机启动项,详细教您电脑如何设置开机启动项

身边不少朋友买了电脑都在比拼电脑开机速度&#xff0c;一般新电脑开机启动时间保持在30s左右就已经很不错了&#xff0c;不过不少朋友电脑开机时间需要1分多钟&#xff0c;不少朋友的答案的设置开机启动项目&#xff0c;尽量减少程序开机启动&#xff0c;那么如何优化提升电脑…

Win11怎么设置开机启动项?

我们在使用电脑的时候经常会打开非常多的软件&#xff0c;而每次开机都需要手动去点击&#xff0c;就会变得非常的麻烦&#xff0c;那么在Win11操作系统中我们应该怎么设置呢&#xff1f;其实方法非常简单&#xff0c;下面小编就带着大家一起看看吧&#xff01; 操作方法&#…

Android Studio 配置 DCL 单例脚本

DCL&#xff08;Double-Checked Locking&#xff09;单例是一种用于创建单例对象的设计模式。单例模式是一种创建型模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供全局访问点。 DCL单例的核心思想是使用双重检查来保证只有在需要时才对实例进行实例化。它结合…

Android业务之通信开发

目录 一、通信开发的概述 二、通信开发的主要组件 三、通信开发的步骤 四、通信开发相关的应用场景 一、通信开发的概述 Android通信Telephone开发是指在Android应用中实现与电话通信相关的功能。通过Telephone开发&#xff0c;可以实现拨打电话、接听电话、发送短信等电话…

python项目在linux中的启动脚本(shell脚本)

背景&#xff1a; 在linux环境&#xff0c;使用shell脚本&#xff0c;实现对某个服务的启动、停止功能。 shell脚本的功能&#xff1a; 启动&#xff08;start&#xff09;&#xff1a;通过参数 start &#xff0c;实现启动服务。如果该服务已经启动&#xff0c;给出已经启动…

@Import详解及@Import注入对象的四种方式

在Java中&#xff0c;Import注解是用于引入其他配置类或Bean的注解。它可以帮助将特定的配置类或Bean注册到Spring容器中&#xff0c;使其可供应用程序使用。 Import详解 Import注解可以用在Configuration注解的类上&#xff0c;也可以用在普通的类上。它作为一个元注解&#…

用API Key保护Spring Boot 接口的安全

1、概述 安全性在REST API开发中扮演着重要的角色。一个不安全的REST API可以直接访问到后台系统中的敏感数据。因此&#xff0c;企业组织需要关注API安全性。 Spring Security 提供了各种机制来保护我们的 REST API。其中之一是 API 密钥。API 密钥是客户端在调用 API 调用时提…

2022哪款蓝牙耳机性价比高?高品质蓝牙耳机测评

在蓝牙耳机的横空出世的时候&#xff0c;受到很多年轻人的追捧&#xff0c;各大网络都上新了蓝牙耳机&#xff0c;因为蓝牙耳机在现在的社会生活中必不可少。下面小编为大家整理的蓝牙耳机好评榜&#xff0c;推荐几款小编觉得品质比较高的几款耳机吧&#xff01; 第一款&#…