溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

配置mac啟動(dòng)項(xiàng)的3種方式總結(jié)

發(fā)布時(shí)間:2020-10-07 18:39:34 來源:腳本之家 閱讀:207 作者:極客教程 欄目:移動(dòng)開發(fā)

前言

在Mac OS X中,有三種方式來實(shí)現(xiàn)啟動(dòng)項(xiàng)的配置:1)Login Items;2)StartupItems;3)launchd daemon。下面話不多說了,來一起看看詳細(xì)的介紹吧。

1. Login Items

打開System Preferences,選擇System -> Accounts,選擇Login Items選項(xiàng)卡,將/Applications目錄下的.app直接拖進(jìn)右邊的列表中。重啟電腦之后就會(huì)發(fā)現(xiàn)列表中的程序在開機(jī)之后就自動(dòng)啟動(dòng)了。

配置mac啟動(dòng)項(xiàng)的3種方式總結(jié)

2. StartupItems

StartupItems,顧名思義,就是在系統(tǒng)啟動(dòng)過程中運(yùn)行的程序,它們可以是運(yùn)行完就立即終止的程序(比如,開機(jī)清空廢紙簍),也可以是一直持續(xù)在系統(tǒng)運(yùn)行周期的后臺(tái)進(jìn)程。

StartupItems一般存放在以下兩個(gè)路徑下:

1)/System/Library/StartupItems

2)/Library/StartupItems

大部分與系統(tǒng)相關(guān)的StartupItems都放在/System/Library/StartupItems這個(gè)路徑下,它們會(huì)先于/Library/StartupItems路徑下的執(zhí)行,因?yàn)榍罢呗窂较碌腟tartupItems提供了系統(tǒng)級(jí)的基礎(chǔ)服務(wù),比如crash reporting,core graphics services,system accounting等,而后者路徑在默認(rèn)情況下是不存在的,需要自己手動(dòng)創(chuàng)建。

這里我們以/Library/StartupItems目錄下的IcebergControlTower為例。

配置mac啟動(dòng)項(xiàng)的3種方式總結(jié)

簡(jiǎn)單來說,在Mac OS X上,一個(gè)StartupItems包含以下兩個(gè)方面的內(nèi)容:

1)可執(zhí)行程序;

2)包含依賴進(jìn)程關(guān)系的plist文件(StartupParameters.plist)。

2.1 The Property List

2.1.1 Plist的key值與含義

StartupParameters.plist 是一個(gè)屬性列表,包含了運(yùn)行可執(zhí)行程序的必要條件。

配置mac啟動(dòng)項(xiàng)的3種方式總結(jié)

該plist需要獲得root權(quán)限,包含了幾個(gè)方面的內(nèi)容:

1.Description;

對(duì)該服務(wù)的一個(gè)簡(jiǎn)單的描述,僅僅是描述,并不是說明實(shí)際的進(jìn)程名稱。

2.Provides;

指定StartupItems提供的服務(wù)。如圖plist文件Provides中說明,StartupItems開啟的后臺(tái)進(jìn)程名為:Iceberg Control Tower。

Provides可以指定多個(gè)服務(wù),反映在圖中就是Item0,Item1…等。這里只有Item0。

3.Uses;

指定了在StartupItems加載之前需要開啟的服務(wù)。Mac OS X系統(tǒng)先嘗試著加載Uses中指定的服務(wù),然后再加載StartupItems。也就是說,即使Uses中指定的服務(wù)沒有加載成功,系統(tǒng)仍然會(huì)加載StartupItems。

4.OrderPreference;

指定執(zhí)行StartupItems的時(shí)間順序。這個(gè)順序的重要程度排在Uses之后,是指定執(zhí)行完Uses之后的順序??赡艿娜≈蛋ǎ篎irst, Early, None(default), Late, Last。

5.Messages。

2.1.2 創(chuàng)建一個(gè)StartupParameters.plist文件

<?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>Description</key> 
 <string>Iceberg Control Tower Initilaization</string> 
 <key>Provides</key> 
 <array> 
  <string>Iceberg Control Tower</string> 
 </array> 
  <key>Uses</key> 
 <array> 
  <string>Disks</string> 
 </array> 
 <key>OrderPreference</key> 
  <string>None</string> 
</dict> 
</plist>

2.2 The Executable File

注意:

  • 可執(zhí)行文件的名稱和它所在的文件夾的文件名是一樣的,這是系統(tǒng)默認(rèn)的規(guī)則。
  • 操作可執(zhí)行文件需要獲得root權(quán)限。
  • 可執(zhí)行文件是一個(gè)shell腳本。

打開IcebergControlTower文件目錄下同名的可執(zhí)行文件,可以看到腳本的具體內(nèi)容:

配置mac啟動(dòng)項(xiàng)的3種方式總結(jié)

一般的可執(zhí)行文件包含這樣幾個(gè)方面的內(nèi)容:

1)./etc/rc.common

Apple提供的一個(gè)腳本庫,該腳本庫里包含了為可執(zhí)行文件引進(jìn)參數(shù)的接口。在這里load這個(gè)庫主要是調(diào)用RunService。

2)StartService(), StopService(), RestartService()

當(dāng)可執(zhí)行文件接收到的參數(shù)為start,stop或者restart時(shí),執(zhí)行相對(duì)應(yīng)的函數(shù)。

參數(shù)含義:

start:開機(jī)過程中開啟服務(wù);

stop:關(guān)機(jī)過程中停止服務(wù);

restart:在特定條件下重啟服務(wù)。

3)RunService “$1”

執(zhí)行傳遞給該腳本的第一個(gè)參數(shù)指定的服務(wù)。

“$1” 表示傳給該腳本的第一個(gè)參數(shù)。例如,傳入的參數(shù)為start,則執(zhí)行StartService()。

3. Launchd Daemon

launchd是Mac OS下用于初始化系統(tǒng)環(huán)境的關(guān)鍵進(jìn)程,它是內(nèi)核裝載成功之后在OS環(huán)境下啟動(dòng)的第一個(gè)進(jìn)程。

采用這種方式來配置自啟動(dòng)項(xiàng)很簡(jiǎn)單,只需要一個(gè)plist文件,通常(同時(shí)也是系統(tǒng)推薦)是將plist放在~/Library/LaunchAgents路徑下。

3.1 plist文件格式及每個(gè)字段的含義:

配置mac啟動(dòng)項(xiàng)的3種方式總結(jié)

1)Label【required】

該項(xiàng)服務(wù)的名稱。

2)OnDemand【optional】

10.4提供的一個(gè)key值,功能與KeepAlive的基本功能相似,在10.5及之后的系統(tǒng)中被KeepAlive替代。KeepAlive擴(kuò)展了更多的功能,除了使用單一的boolean作為key值之外,還能使用字典結(jié)合多個(gè)key值。

3)Program【ProgramArgument是required的,在沒有ProgramArgument的情況下,必須要包含Program這個(gè)key】

指定可執(zhí)行文件的路徑。

4)RunAtLoad【optional】

標(biāo)識(shí)launchd在加載完該項(xiàng)服務(wù)之后立即啟動(dòng)路徑指定的可執(zhí)行文件。默認(rèn)值為false。

5)WorkingDirectory【optional】

該key在開啟可執(zhí)行文件之前,指定當(dāng)前工作目錄的路徑。

6)KeepAlive【optional】

這個(gè)key值是用來控制可執(zhí)行文件是持續(xù)運(yùn)行呢,還是滿足具體條件之后再啟動(dòng)。默認(rèn)值為false,也就是說滿足具體條件之后才啟動(dòng)。當(dāng)設(shè)置值為ture時(shí),表明無條件的開啟可執(zhí)行文件,并使之保持在整個(gè)系統(tǒng)運(yùn)行周期內(nèi)。

3.2 創(chuàng)建一個(gè)plist文件:

<?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>com.yourcompany.HSPA_USB_MODEM</string> 
 <key>OnDemand</key> 
 <false/> 
 <key>Program</key> 
 <string>/Application/HSPA USB MODEM.app/Running</string> 
 <key>RunAtLoad</key> 
 <true/> 
 <key>WorkingDirectory</key> 
 <string>/Application/HSPA USB MODEM.app</string> 
</dict> 
</plist> 

4. 三種方式的區(qū)別

初步了解了系統(tǒng)的啟動(dòng)過程之后,再來看這三種配置啟動(dòng)項(xiàng)的方式,就很容易理解這三種方式之間的差異了。

總的來說,LoginItems 和StartupItems的區(qū)別較明顯。

StartupItems LoginItems
Depedency Ordering Need Do not Need
Load Timing during startup after a user logs in
Launched by WHO by root, but not necessarily the user
Processes types background processes and processes that terminate after running any Mac OS X executable

對(duì)于我們自定義的Launchd daemon,通常(同時(shí)也是系統(tǒng)推薦)是放在~/Library/LaunchAgents路徑下。launchd進(jìn)程需要在用戶login之后才能加載。這種方式與LoginItems最大的區(qū)別在于,啟動(dòng)的進(jìn)程不同。LoginItems是通過loginwindow去啟動(dòng)的,而Launchd daemon是通過com.apple.launchd.peruser啟動(dòng)。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI