讓Mac OS X系統啓動時執行腳本

   公司購買了Zoho公司的資產管理軟件AssetExplorer,該資產管理軟件可以通過在客戶機電腦上安裝Agent客戶端軟件收集客戶機的硬件及軟件信息。公司有若干臺iMac電腦,運行的是Mac OS X 10.6的系統,由於AssetExplorer只支持Windows版本的Agent,對於其他系統的計算機需要通過在客戶端執行bash腳本文件的方式,收集客戶機的信息並上傳到服務器。這就要求客戶機的Mac OS X系統啓動的時候能夠自動執行腳本程序,而且要基於系統服務層面,用戶無需登錄,腳本也能在後臺運行,最好腳本程序後臺還能做到固定時間自動運行。


   我們可以利用Mac OS X內置的一種稱爲Launch Daemon / Agent的機制來實現系統啓動時自動執行腳本程序。Mac OS X從10.4 開始,採用 launchd進程來管理整個操作系統的服務及進程。傳統的UNIX 會使用 /etc/rc.* 或其他的機制來管理開機時要啓動的啓動服務,而現在的Mac OS X則使用launchd來管理,它的啓動服務稱爲Launch Daemon / Agents。利用Launch Daemon / Agent,我們就可以令腳本程序在系統啓動的時候在後臺運行了。


  • Launch Daemon和Launch Agent的區別

  Launch Daemon和Launch Agent 是同一種東西在不同應用範圍的名稱。Launch Daemon是系統級別的服務,稱爲daemon,Launch Agent是用戶級別的服務,稱爲agent,前者在開機時會加載,後者在用戶登錄後纔會加載。所以我們採用Launch Daemon的方式運行腳本。


  • 從AssetExolorer導出腳本文件

  選擇掃描→孤立工作站審計→通過腳本掃描工作站→Mac導出腳本文件ae_scan_mac.sh,並修改腳本文件中的hostName="服務器IP地址或域名地址",並檢查portNo一項是否正確。


  • 創建plist配置文件

  Launchd進程需要讀取一個xml格式的plist配置文件,創建該文件並將其放置在/System/Library/LaunchDaemons/ 或者/Library/LaunchDaemons/目錄下。可在Windows下預先創建該文件,需要使用支持Unix格式的文本編輯器(比如UltraEdit)創建該文件。

  

其中plist文件格式及每個字段的含義:

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>


其中的關鍵字解釋:

1)Label(必選)

該項服務的名稱。

2)Program(ProgramArgument是必選的,在沒有ProgramArgument的情況下,必須要包含Program關鍵字)

指定可執行文件的路徑和名稱。

3)RunAtLoad(可選)

標識launchd在加載完該項服務之後立即啓動路徑指定的可執行文件。默認值爲false。設置爲true即可實現開機運行腳本文件。

4)WorkingDirectory(可選)

運行可執行文件之前,指定當前工作目錄的路徑。

5)KeepAlive(可選)

這個關鍵字可以用來控制是否讓可執行文件持續運行,默認值爲false,也就是說滿足具體條件之後才啓動。當設置值爲ture時,表明無條件的開啓可執行文件,並使之保持在整個系統運行週期內。

6)StartCalendarInterval(可選)

該關鍵字可以用來設置定時執行可執行程序,可使用Month、Day、Hour、Minute等子關鍵字,它可以指定腳本在多少月、天、小時、分鐘、星期幾等時間上執行,若缺少某個關鍵字則表示任意該時間點,類似於Unix的Crontab計劃任務的設置方式,比如在該例子中設置爲每天11點鐘執行腳本文件。

   所有key關鍵字詳細使用說明可以在Mac OS X終端下使用命令man launchd.plist查詢。


  • 在客戶機部署配置文件和腳本文件

1) 首先爲Mac OS X系統的當前的用戶設置一個密碼,在系統偏好設置→賬戶中設置。

  然後,可通過共享等方式將腳本文件ae_scan_mac.sh和plist文件ae_scan_mac.plist拷貝到本地硬盤的一個臨時目錄中,然後打開實用工具→終端,使用以下命令:

sudo mv ae_scan_mac.* /Library/LaunchDaemons

將這兩個文件移動到/Library/LaunchDaemons/目錄下。


2) 修改文件權限:

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


wKiom1YKR_WCHjOwAAJa6EWwXoQ081.jpg


3) plist文件的編輯和檢查

可使用命令sudo vim ae_scan_mac.plist對文件進行修改。

檢查plist文件的語法:

plutil ae_scan_mac.plist

若返回OK則表示文件語法正確。


4) 啓動服務並載入plsit文件:

sudo launchctl load /Library/LaunchDaemons/ae_scan_mac.plist

或者重啓Mac電腦也可以。

要留意的是,每次修改完plist文件後必須使用以下命令重新載入plist文件又或者重啓電腦,plist的配置纔會生效。

sudo launchctl unload /Library/LaunchDaemons/ae_scan_mac.plist

sudo launchctl load /Library/LaunchDaemons/ae_scan_mac.plist


接着,檢查服務的運行狀態:

sudo launchctl list

wKioL1YKSLCy3gpUAAIkefzxnxA635.jpg


5) 最後待腳本運行後,就能在AssetExplorer服務器上看到這臺客戶機的信息了,之後客戶機就會自動按照plist文件設置的時間或者重啓機器後將機器信息上傳到服務器。


兩個文件的部署有幾個地方需要注意的:

1)文件的權限必須正確,兩個文件所有者必須爲root,腳本文件必須有執行權限。

2)plist文件的語法必須正確,要留意配置中的程序工作目錄和運行參數不要錯。可執行:sudo launchctl start /Library/LaunchDaemons/ae_scan_mac.plist

強制運行服務,或者直接運行一下腳本程序,測試一下腳本文件的運行是否正常。

3)每次plist文件修改後必須執行launchctl unload/load卸載並重新載入plist文件,才能使新的配置文件馬上生效。

  腳本程序和配置文件分別在多臺客戶機一次性部署後,AssetExplorer就可以自動收集到所有Mac電腦的硬件和軟件信息,即使機器配置更改了也無需手動添加,方便了公司的資產管理。Launchd進程的功能比較強大,Apple推薦並已使用該進程替代傳統的cron了,大家有興趣可以再研究一下。


原文爲博主所著,並刊登於《網絡運維與管理》雜誌2014.02.3.4期。








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章