让Mac OS X系统启动时执行脚本

   公司购买了Zoho公司的资产管理软件AssetExplorer,该资产管理软件能够经过在客户机电脑上安装Agent客户端软件收集客户机的硬件及软件信息。公司有若干台iMac电脑,运行的是Mac OS X 10.6的系统,因为AssetExplorer只支持Windows版本的Agent,对于其余系统的计算机须要经过在客户端执行bash脚本文件的方式,收集客户机的信息并上传到服务器。这就要求客户机的Mac OS X系统启动的时候可以自动执行脚本程序,并且要基于系统服务层面,用户无需登陆,脚本也能在后台运行,最好脚本程序后台还能作到固定时间自动运行。vim


   咱们能够利用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,咱们就能够令脚本程序在系统启动的时候在后台运行了。bash


  • Launch Daemon和Launch Agent的区别服务器

  Launch Daemon和Launch Agent 是同一种东西在不一样应用范围的名称。Launch Daemon是系统级别的服务,称为daemon,Launch Agent是用户级别的服务,称为agent,前者在开机时会加载,后者在用户登陆后才会加载。因此咱们采用Launch Daemon的方式运行脚本。网络


  • 从AssetExolorer导出脚本文件app

  选择扫描→孤立工做站审计→经过脚本扫描工做站→Mac导出脚本文件ae_scan_mac.sh,并修改脚本文件中的hostName="服务器IP地址或域名地址",并检查portNo一项是否正确。运维


  • 建立plist配置文件编辑器

  Launchd进程须要读取一个xml格式的plist配置文件,建立该文件并将其放置在/System/Library/LaunchDaemons/ 或者/Library/LaunchDaemons/目录下。可在Windows下预先建立该文件,须要使用支持Unix格式的文本编辑器(好比UltraEdit)建立该文件。ide

  

其中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期。

相关文章
相关标签/搜索