3、launchd 系统最先化进程配置,1、系统偏好设置-&gt

一、Mac下的起步服务重点多个可配置的地方

1、系统偏好设置->帐户->登陆项

2、/System/Library/StartupItems 和 /Library/StartupItems/
3、launchd 系统初阶化进程配置。

前三种优化相比较简单,本文紧要介绍的是第二种更加复杂的launchd配置优化。
launchd是Mac OS下,用于开端化系统环境的第一进程。类似Linux下的init, rc。

 

一、Mac下的开行服务重点几个可配置的地点

1、系统偏好设置->帐户->登陆项

2、/System/Library/StartupItems 和 /Library/StartupItems/
3、launchd 系统起始化进程配置。

前二种优化相比简单,本文首要介绍的是第两种更加复杂的launchd配置优化。
launchd是Mac OS下,用于初阶化系统环境的显要进程。类似Linux下的init, rc。

 

二、Mac OS X的启动原理

1,mac固件激活,最先化硬件,加载BootX指引器。
2,BootX加载内核与根本扩充(kext)。
3,内核启动launchd进程。
4,launchd根据 /System/Library/LaunchAgents ,
/System/Library/LaunchDaemons , /Library/LaunchDaemons,
Library/LaunchAgents ,
~/Library/LaunchAgents里的plist配置,启动服务守护进程。

看完了Mac OS X的启动原理,我们不难发现 /System/Library/LaunchAgents ,
/System/Library/LaunchDaemons ,  /Library/LaunchDaemons,
Library/LaunchAgents六个目录下的plist属性文件是优化系统的首要。

二、Mac OS X的启动原理

1,mac固件激活,伊始化硬件,加载BootX引导器。
2,BootX加载内核与基本扩张(kext)。
3,内核启动launchd进程。
4,launchd根据 /System/Library/LaunchAgents ,
/System/Library/LaunchDaemons , /Library/LaunchDaemons,
Library/LaunchAgents ,
~/Library/LaunchAgents里的plist配置,启动服务守护进程。

看完了Mac OS X的启动原理,我们不难察觉 /System/Library/LaunchAgents ,
/System/Library/LaunchDaemons ,  /Library/LaunchDaemons,
Library/LaunchAgents七个目录下的plist属性文件是优化系统的显要。

 

三、服务目录介绍及有关概念:
/System/Library和/Library和~/Library目录的区别?
/System/Library目录是存放Apple自己支付的软件。
/Library目录是系统管理员存放的第三方软件。
~/Library/是用户自己存放的第三方软件。

LaunchDaemons和LaunchAgents的区别?
LaunchDaemons是用户未登陆前就开行的劳务(守护进程)。
LaunchAgents是用户登陆后开行的服务(守护进程)。

 

 

三、服务目录介绍及相关概念:
/System/Library和/Library和~/Library目录的区分?
/System/Library目录是存放Apple自己开发的软件。
/Library目录是系统管理员存放的第三方软件。
~/Library/是用户自己存放的第三方软件。

LaunchDaemons和LaunchAgents的区别?
LaunchDaemons是用户未登陆前就开动的劳动(守护进程)。
LaunchAgents是用户登陆后开行的服务(守护进程)。

 

四、plist文件格式及各类字段的意思

下面提到的几个目录下的plist文件格式及各类字段的意义:

Key Description Required
Label The name of the job yes
ProgramArguments Strings to pass to the program when it is executed yes
UserName The job will be run as the given user, who may not necessarily be the one who submitted it to launchd. no
inetdCompatibility Indicates that the daemon expects to be run as if it were launched by?inetd no
Program The path to your executable. This key can save the ProgramArguments key for flags and arguments. no
onDemand A boolean flag that defines if a job runs continuously or not no
RootDirectory The job will be chrooted?into another directory no
ServiceIPC Whether the daemon can speak IPC to launchd no
WatchPaths Allows launchd to start a job based on modifications at a file-system path no
QueueDirectories Similar to WatchPath, a queue will only watch an empty directory for new files no
StartInterval Used to schedule a job that runs on a repeating schedule. Specified as the number of seconds to wait between runs. no
StartCalendarInterval Job scheduling. The?syntax?is similar to?cron. no
HardResourceLimits Controls restriction of the resources consumed by any job no
LowPriorityIO Tells the kernel that this task is of a low priority when doing file system I/O no
Sockets An array can be used to specify what socket the daemon will listen on for launch on demand no

看不懂下边地plist配置吗?没关系,我们的优化策略是一心卸载服务,所以我们不用关心plist里的布局含义。

 

四、plist文件格式及各类字段的意思

上边提到的六个目录下的plist文件格式及各样字段的含义:

Key Description Required
Label The name of the job yes
ProgramArguments Strings to pass to the program when it is executed yes
UserName The job will be run as the given user, who may not necessarily be the one who submitted it to launchd. no
inetdCompatibility Indicates that the daemon expects to be run as if it were launched by?inetd no
Program The path to your executable. This key can save the ProgramArguments key for flags and arguments. no
onDemand A boolean flag that defines if a job runs continuously or not no
RootDirectory The job will be chrooted?into another directory no
ServiceIPC Whether the daemon can speak IPC to launchd no
WatchPaths Allows launchd to start a job based on modifications at a file-system path no
QueueDirectories Similar to WatchPath, a queue will only watch an empty directory for new files no
StartInterval Used to schedule a job that runs on a repeating schedule. Specified as the number of seconds to wait between runs. no
StartCalendarInterval Job scheduling. The?syntax?is similar to?cron. no
HardResourceLimits Controls restriction of the resources consumed by any job no
LowPriorityIO Tells the kernel that this task is of a low priority when doing file system I/O no
Sockets An array can be used to specify what socket the daemon will listen on for launch on demand no

看不懂下面地plist配置吗?没关系,大家的优化策略是一点一滴卸载服务,所以我们不要关心plist里的配置含义。

 

五、服务优化

剥夺服务,我们需要选用Mac OS提供的一个工具指令-launchctl
launchctl
指令会针对服务设置一个剥夺标志,launchd启动时会先反省这多少个服务是否被禁用,从而确定是否需要启用这一个服务。

剥夺服务的法子1
先找到禁用标志文件
/var/db/launchd.db/com.apple.launchd/overrides.plist,查看你要禁用的劳务是否已被剥夺了。
些微服务已被禁用,但未列在overrides.plist里。此时,你还亟需检查这么些服务的plist文件Label字段是否早已标记为
Disable。

确认那些服务未禁用后,咱们就可以通过调用如下命令,来剥夺服务:
sudo launchctl unload plist文件路径
sudo launchctl unload -w plist文件路径
例如,我想禁用spotlight,则输入
sudo launchctl unload
/System/Library/LaunchAgents/com.apple.Spotlight.plist
sudo launchctl unload -w
/System/Library/LaunchAgents/com.apple.Spotlight.plist

禁用完服务之后,重启Mac OS即可见效。

剥夺服务的方法2,一种更使得且暴力的方法(推荐)
先卸载服务
sudo launchctl unload
/System/Library/LaunchAgents/com.apple.Spotlight.plist
下一场将plist文件mv到任何目录备份。重启。搞定。是不是很粗略!

自我个人相比较欣赏这种禁用服务的情势,所以推举一下。

一经发现服务禁用后,系统或软件出现分外,可以透过如下命令,还原服务:
方法1:
sudo launchctl load -wF plist文件路径
方法2:
将备份的plist文件mv回原来的公文夹。
sudo launchctl load plist文件路径

小心:系统级服务的剥夺要充足小心,请在禁用前google,确保您熟谙这些服务的法力。否则恐怕导致系统不能启动。
最安全的做法就是决不去禁用它了。

本来,用户服务咱们如故得以放心禁用的,有题目最多再启用呗。

下边是自身禁用的服务列表:
/System/Library/LaunchDaemons/com.apple.metadata.mds.plist
(禁用spotlight的前提)
/System/Library/LaunchAgents/com.apple.Spotlight.plist (Spotlight)
/Library/LaunchDaemons/com.google.keystone.daemon.plist (Google Software
Update)
/Library/LaunchAgents/com.google.keystone.root.agent (Google Software
Update)
~/Library/LaunchAgents/com.google.keystone.agent.plist(Google Software
Update,用户下的经过不需要加 sudo)
~/Library/LaunchAgents/com.apple.CSConfigDotMacCert-ken.wug\@me.com-Shared瑟维斯(Service)s.Agent.plist
(me.com的共享服务,我毫不)
/System/Library/LaunchDaemons/org.cups.cupsd.plist (打印机)
/System/Library/LaunchDaemons/org.cups.cups-lpd.plist (打印机)
/System/Library/LaunchDaemons/com.apple.blued.plist (蓝牙)
/System/Library/LaunchAgents/com.apple.AirPortBaseStationAgent.plist
(apple无线基站,我从没这么些装置)

精通守护进程(服务)名,如何找到相应的plist文件?
将进程(服务)名拷贝,然后到 /System/Library/LaunchAgents
,/System/Library/LaunchDaemons , /Library/LaunchDaemons,
Library/LaunchAgents , ~/Library/LaunchAgents
多少个目录里,通过以下命令查找:

ll|grep 进程(服务)名
比如
ll|grep blued
在 /System/Library/LaunchDaemons
中找到了它。接下来,请按下边携带的步骤,禁用该服务。

五、服务优化

剥夺服务,我们需要利用Mac OS提供的一个工具指令-launchctl
launchctl
指令会针对服务设置一个剥夺标志,launchd启动时会先反省这么些服务是否被禁用,从而确定是否需要启用那一个服务。

剥夺服务的法门1
先找到禁用标志文件
/var/db/launchd.db/com.apple.launchd/overrides.plist,查看你要禁用的服务是否已被剥夺了。
有点服务已被禁用,但未列在overrides.plist里。此时,你还索要检讨那么些服务的plist文件Label字段是否早已标记为
Disable。

肯定这个服务未禁用后,大家就可以通过调用如下命令,来剥夺服务:
sudo launchctl unload plist文件路径
sudo launchctl unload -w plist文件路径
比如说,我想禁用spotlight,则输入
sudo launchctl unload
/System/Library/LaunchAgents/com.apple.Spotlight.plist
sudo launchctl unload -w
/System/Library/LaunchAgents/com.apple.Spotlight.plist

禁用完服务之后,重启Mac OS即可见效。

剥夺服务的方法2,一种更实惠且暴力的法子(推荐)
先卸载服务
sudo launchctl unload
/System/Library/LaunchAgents/com.apple.Spotlight.plist
下一场将plist文件mv到其它目录备份。重启。搞定。是不是很粗略!

自身个人比较喜欢这种禁用服务的方法,所以推举一下。

假诺发现服务禁用后,系统或软件出现相当,能够通过如下命令,还原服务:
方法1:
sudo launchctl load -wF plist文件路径
方法2:
将备份的plist文件mv回原来的文书夹。
sudo launchctl load plist文件路径

留意:系统级服务的剥夺要非常小心,请在禁用前google,确保您熟练这一个服务的效益。否则恐怕导致系统不可以启动。
最安全的做法就是绝不去禁用它了。

理所当然,用户服务大家还是能放心禁用的,有问题最多再启用呗。

下边是自己禁用的劳务列表:
/System/Library/LaunchDaemons/com.apple.metadata.mds.plist
(禁用spotlight的前提)
/System/Library/LaunchAgents/com.apple.Spotlight.plist (Spotlight)
/Library/LaunchDaemons/com.google.keystone.daemon.plist (Google Software
Update)
/Library/LaunchAgents/com.google.keystone.root.agent (Google Software
Update)
~/Library/LaunchAgents/com.google.keystone.agent.plist(Google Software
Update,用户下的过程不需要加 sudo)
~/Library/LaunchAgents/com.apple.CSConfigDotMacCert-ken.wug\@me.com-SharedServices.Agent.plist
(me.com的共享服务,我绝不)
/System/Library/LaunchDaemons/org.cups.cupsd.plist (打印机)
/System/Library/LaunchDaemons/org.cups.cups-lpd.plist (打印机)
/System/Library/LaunchDaemons/com.apple.blued.plist (蓝牙)
/System/Library/LaunchAgents/com.apple.AirPortBaseStationAgent.plist
(apple无线基站,我从不那多少个装置)

通晓守护进程(服务)名,怎么着找到相应的plist文件?
将进程(服务)名拷贝,然后到 /System/Library/LaunchAgents
,/System/Library/LaunchDaemons , /Library/LaunchDaemons,
Library/LaunchAgents , ~/Library/LaunchAgents
四个目录里,通过以下命令查找:

ll|grep 进程(服务)名
比如
ll|grep blued
在 /System/Library/LaunchDaemons
中找到了它。接下来,请按下面指导的步子,禁用该服务。

相关文章