让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
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
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期。
推荐阅读
-
苹果电脑怎么锁屏?OS X快速让Mac/MacBook屏幕息屏/锁屏的方法
-
Mac OS X系统如何将文档导出成PDF格式的方法
-
让Mac OS X系统启动时执行脚本的方法
-
Mac OS X 系统下一键密码锁定屏幕,防止别人乱用乱看的方法
-
苹果系统(Mac OS X) 下将 iTunes 目录搬家的方法
-
苹果Mac OS X系统快速显示/恢复隐藏文件的方法介绍
-
在苹果Mac OS X 系统上升级 Mysql 数据库的方法详细介绍
-
MAC OS X10.2系统Photoshop无法编辑中文字符的解决方法
-
iOS、Mac OS X系统中编程实现汉字转拼音的方法(超级简单)
-
mac系统OS X10.10版本安装最新5.7.9mysql的方法_MySQL