Mac OS啟動服務最佳化進階篇

來源:互聯網
上載者:User

   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屬性檔案是最佳化系統的關鍵。

  下面再來理解幾個基礎概念:

  /System/Library和/Library和~/Library目錄的區別?

  /System/Library目錄是存放Apple自己開發的軟體。

  /Library目錄是系統管理員存放的第三方軟體。

  ~/Library/是使用者自己存放的第三方軟體。

  LaunchDaemons和LaunchAgents的區別?

  LaunchDaemons是使用者未登陸前就啟動的服務(守護進程)。

  LaunchAgents是使用者登陸後啟動的服務(守護進程)。

  上面提到的五個目錄下的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-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 中找到了它。接下來,請按上面指導的步驟,禁用該服務。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.