讓Mac OS X系統(tǒng)啟動(dòng)時(shí)執(zhí)行腳本的方法

我們可以利用Mac OS X內(nèi)置的一種稱(chēng)為L(zhǎng)aunch Daemon / Agent的機(jī)制來(lái)實(shí)現(xiàn)系統(tǒng)啟動(dòng)時(shí)自動(dòng)執(zhí)行腳本程序。Mac OS X從10.4 開(kāi)始,采用 launchd進(jìn)程來(lái)管理整個(gè)操作系統(tǒng)的服務(wù)及進(jìn)程。傳統(tǒng)的UNIX 會(huì)使用 /etc/rc.* 或其他的機(jī)制來(lái)管理開(kāi)機(jī)時(shí)要啟動(dòng)的啟動(dòng)服務(wù),而現(xiàn)在的Mac OS X則使用launchd來(lái)管理,它的啟動(dòng)服務(wù)稱(chēng)為L(zhǎng)aunch Daemon / Agents。利用Launch Daemon / Agent,我們就可以令腳本程序在系統(tǒng)啟動(dòng)的時(shí)候在后臺(tái)運(yùn)行了。
•Launch Daemon和Launch Agent的區(qū)別
Launch Daemon和Launch Agent 是同一種東西在不同應(yīng)用范圍的名稱(chēng)。Launch Daemon是系統(tǒng)級(jí)別的服務(wù),稱(chēng)為daemon,Launch Agent是用戶(hù)級(jí)別的服務(wù),稱(chēng)為agent,前者在開(kāi)機(jī)時(shí)會(huì)加載,后者在用戶(hù)登錄后才會(huì)加載。所以我們采用Launch Daemon的方式運(yùn)行腳本。
•從AssetExolorer導(dǎo)出腳本文件
選擇掃描→孤立工作站審計(jì)→通過(guò)腳本掃描工作站→Mac導(dǎo)出腳本文件ae_scan_mac.sh,并修改腳本文件中的hostName="服務(wù)器IP地址或域名地址",并檢查portNo一項(xiàng)是否正確。
•創(chuàng)建plist配置文件
Launchd進(jìn)程需要讀取一個(gè)xml格式的plist配置文件,創(chuàng)建該文件并將其放置在/System/Library/LaunchDaemons/ 或者/Library/LaunchDaemons/目錄下??稍赪indows下預(yù)先創(chuàng)建該文件,需要使用支持Unix格式的文本編輯器(比如UltraEdit)創(chuàng)建該文件。
其中plist文件格式及每個(gè)字段的含義:
ae_scan_mac.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.manageengine.ae_scan_mac</string>
- <key>Program</key>
- <string>ae_scan_mac.sh</string>
- <key>RunAtLoad</key>
- <true/>
- <key>WorkingDirectory</key>
- <string>/Library/LaunchDaemons/</string>
- <key>KeepAlive</key>
- <false/>
- <key>StartCalendarInterval</key>
- <dict>
- <key>Hour</key>
- <integer>11</integer>
- <key>Minute</key>
- <integer>0</integer>
- </dict>
- </dict>
- </plist>
其中的關(guān)鍵字解釋?zhuān)?
1)Label(必選)
該項(xiàng)服務(wù)的名稱(chēng)。
2)Program(ProgramArgument是必選的,在沒(méi)有ProgramArgument的情況下,必須要包含Program關(guān)鍵字)
指定可執(zhí)行文件的路徑和名稱(chēng)。
3)RunAtLoad(可選)
標(biāo)識(shí)launchd在加載完該項(xiàng)服務(wù)之后立即啟動(dòng)路徑指定的可執(zhí)行文件。默認(rèn)值為false。設(shè)置為true即可實(shí)現(xiàn)開(kāi)機(jī)運(yùn)行腳本文件。
4)WorkingDirectory(可選)
運(yùn)行可執(zhí)行文件之前,指定當(dāng)前工作目錄的路徑。
5)KeepAlive(可選)
這個(gè)關(guān)鍵字可以用來(lái)控制是否讓可執(zhí)行文件持續(xù)運(yùn)行,默認(rèn)值為false,也就是說(shuō)滿(mǎn)足具體條件之后才啟動(dòng)。當(dāng)設(shè)置值為ture時(shí),表明無(wú)條件的開(kāi)啟可執(zhí)行文件,并使之保持在整個(gè)系統(tǒng)運(yùn)行周期內(nèi)。
6)StartCalendarInterval(可選)
該關(guān)鍵字可以用來(lái)設(shè)置定時(shí)執(zhí)行可執(zhí)行程序,可使用Month、Day、Hour、Minute等子關(guān)鍵字,它可以指定腳本在多少月、天、小時(shí)、分鐘、星期幾等時(shí)間上執(zhí)行,若缺少某個(gè)關(guān)鍵字則表示任意該時(shí)間點(diǎn),類(lèi)似于Unix的Crontab計(jì)劃任務(wù)的設(shè)置方式,比如在該例子中設(shè)置為每天11點(diǎn)鐘執(zhí)行腳本文件。
所有key關(guān)鍵字詳細(xì)使用說(shuō)明可以在Mac OS X終端下使用命令man launchd.plist查詢(xún)。
•在客戶(hù)機(jī)部署配置文件和腳本文件
1) 首先為Mac OS X系統(tǒng)的當(dāng)前的用戶(hù)設(shè)置一個(gè)密碼,在系統(tǒng)偏好設(shè)置→賬戶(hù)中設(shè)置。
然后,可通過(guò)共享等方式將腳本文件ae_scan_mac.sh和plist文件ae_scan_mac.plist拷貝到本地硬盤(pán)的一個(gè)臨時(shí)目錄中,然后打開(kāi)實(shí)用工具→終端,使用以下命令:
sudo mv ae_scan_mac.* /Library/LaunchDaemons
將這兩個(gè)文件移動(dòng)到/Library/LaunchDaemons/目錄下。
2) 修改文件權(quán)限:
sudo chown root:wheel /Library/LaunchDaemons/ae_scan_mac.*
sudo chmod a+x /Library/LaunchDaemons/ae_scan_mac.sh
sudo chmod 644 /Library/LaunchDaemons/ae_scan_mac.plist
3) plist文件的編輯和檢查
可使用命令sudo vim ae_scan_mac.plist對(duì)文件進(jìn)行修改。
檢查plist文件的語(yǔ)法:
plutil ae_scan_mac.plist
若返回OK則表示文件語(yǔ)法正確。
4) 啟動(dòng)服務(wù)并載入plsit文件:
sudo launchctl load /Library/LaunchDaemons/ae_scan_mac.plist
或者重啟Mac電腦也可以。
要留意的是,每次修改完plist文件后必須使用以下命令重新載入plist文件又或者重啟電腦,plist的配置才會(huì)生效。
sudo launchctl unload /Library/LaunchDaemons/ae_scan_mac.plist
sudo launchctl load /Library/LaunchDaemons/ae_scan_mac.plist
接著,檢查服務(wù)的運(yùn)行狀態(tài):
sudo launchctl list
5) 最后待腳本運(yùn)行后,就能在AssetExplorer服務(wù)器上看到這臺(tái)客戶(hù)機(jī)的信息了,之后客戶(hù)機(jī)就會(huì)自動(dòng)按照plist文件設(shè)置的時(shí)間或者重啟機(jī)器后將機(jī)器信息上傳到服務(wù)器。
兩個(gè)文件的部署有幾個(gè)地方需要注意的:
1)文件的權(quán)限必須正確,兩個(gè)文件所有者必須為root,腳本文件必須有執(zhí)行權(quán)限。
2)plist文件的語(yǔ)法必須正確,要留意配置中的程序工作目錄和運(yùn)行參數(shù)不要錯(cuò)??蓤?zhí)行:sudo launchctl start /Library/LaunchDaemons/ae_scan_mac.plist
強(qiáng)制運(yùn)行服務(wù),或者直接運(yùn)行一下腳本程序,測(cè)試一下腳本文件的運(yùn)行是否正常。
3)每次plist文件修改后必須執(zhí)行l(wèi)aunchctl unload/load卸載并重新載入plist文件,才能使新的配置文件馬上生效。
腳本程序和配置文件分別在多臺(tái)客戶(hù)機(jī)一次性部署后,AssetExplorer就可以自動(dòng)收集到所有Mac電腦的硬件和軟件信息,即使機(jī)器配置更改了也無(wú)需手動(dòng)添加,方便了公司的資產(chǎn)管理。Launchd進(jìn)程的功能比較強(qiáng)大,Apple推薦并已使用該進(jìn)程替代傳統(tǒng)的cron了,大家有興趣可以再研究一下。
原文為博主所著,并刊登于《網(wǎng)絡(luò)運(yùn)維與管理》雜志2014.02.3.4期。
相關(guān)文章
mac怎么管理開(kāi)機(jī)自啟動(dòng)? 輕松應(yīng)對(duì)啟動(dòng)變慢的技巧
無(wú)論是 Windows 系統(tǒng)用戶(hù),還是 macOS 系統(tǒng)用戶(hù),都可以通過(guò)多種方法對(duì)開(kāi)機(jī)自啟動(dòng)項(xiàng)進(jìn)行有效的管理,開(kāi)機(jī)啟動(dòng)這個(gè)叫法不準(zhǔn)確,mac系統(tǒng)應(yīng)該叫“自啟動(dòng)”或則“登錄時(shí)啟動(dòng)”2025-04-18macOS無(wú)效Launchpad圖標(biāo)輕松刪除的4 種實(shí)用方法
mac中不在appstore上下載的應(yīng)用經(jīng)常在刪除后它的圖標(biāo)還殘留在launchpad中,并且長(zhǎng)按圖標(biāo)也不會(huì)出現(xiàn)刪除符號(hào),下面解決這個(gè)問(wèn)題2025-04-02令人驚艷的AI新功能! macOS Sequoia 15.4正式發(fā)布
macOS Sequoia 15.4 正式發(fā)布,帶來(lái)了令人驚艷的 AI 新功能!其中,最亮眼的是基于 AI 的「郵件」自動(dòng)分類(lèi)功能,詳細(xì)請(qǐng)看下文介紹2025-04-02macOS屏幕使用時(shí)間是什么? mac屏幕使用時(shí)間設(shè)置和關(guān)閉技巧
屏幕使用時(shí)間最初是 iPhone 和 iPad 的一個(gè)功能,現(xiàn)在mac設(shè)備也有,該怎么設(shè)置查看和關(guān)閉屏幕使用時(shí)間呢?詳細(xì)請(qǐng)看下文介紹2025-04-02如何關(guān)閉 Mac 觸發(fā)角功能或設(shè)置修飾鍵? mac電腦防止誤觸設(shè)置技巧
從Windows換到iOS大半年來(lái),觸發(fā)角是我覺(jué)得值得吹爆的MacBook效率神器,成為一大說(shuō)服理由,下面我們就來(lái)看看mac電腦防止誤觸設(shè)置技巧2025-03-10一鍵啟動(dòng)常用功能! 一篇看懂Mac 觸發(fā)角設(shè)置指南
Mac觸發(fā)角設(shè)置技巧,讓你的操作更高效!今天我們來(lái)聊聊如何利用Mac的系統(tǒng)設(shè)置來(lái)提升你的工作效率和舒適度,其中一個(gè)非常實(shí)用的功能就是觸發(fā)角2025-03-07Mac電腦mds_store進(jìn)程占用cpu過(guò)高的三種解決辦法
當(dāng) macOS 的 mds_stores 進(jìn)程占用過(guò)高的 CPU 使用率時(shí),可能是由于 Spotlight 索引過(guò)程導(dǎo)致的,Spotlight 是 macOS 中用于搜索和索引文件的系統(tǒng)服務(wù),而 mds_stores 是其索2025-03-07macOS Sequoia 15.3 發(fā)布:附詳細(xì)更新內(nèi)容一覽
蘋(píng)果公司最新發(fā)布的 macOS Sequoia 15.3 更新,已解決了 SuperDuper 備份工具無(wú)法創(chuàng)建可啟動(dòng)備份的 BUG,下面我們就來(lái)看看這個(gè)版本帶來(lái)的具體變化2025-02-06Mac 啟動(dòng)行為由你掌控! macOS 15 Sequoia禁止自動(dòng)開(kāi)機(jī)啟動(dòng)的技巧
Mac設(shè)備在打開(kāi)屏幕或連接電源時(shí),會(huì)自動(dòng)開(kāi)機(jī)啟動(dòng),如果你不喜歡這種設(shè)定,想要禁止自動(dòng)啟動(dòng),該怎么操作呢?我們可以使用命令實(shí)現(xiàn)2025-01-31mac中資源庫(kù)在哪? macOS資源庫(kù)文件夾詳解
經(jīng)常使用Mac電腦的用戶(hù)會(huì)發(fā)現(xiàn),找不到Mac電腦的資源庫(kù),我們?cè)趺创蜷_(kāi)資源庫(kù)并使用呢?下面我們就來(lái)看看macOS資源庫(kù)文件夾詳解2025-01-21