这个问题困扰了我好久,今天连续搞了6个小时终于搞定.
需要的工具: lingon 可以通过mac port安装最后一个免费的版本,或者可以从sourceforge上下载. 最新的版本已经不能免费使用了,可以从mac app store花几美元买到. 建议用这个工具的原因是因为自己写plist file难免出错.
进入正题, 假设我们要借助launchd在系统启动或者某个user login的时候执行一个任务, 本处以系统启动时创建一个ramdisk为例子. 先假设我们已经写好一个脚本叫ramdisk,路径是/usr/bin/ramdisk, make it executable, 那么剩下的就非常简单了.
1. 在/Library/LaunchDaemons/下创建一个plist文件, 比如叫做com.yourname.ramdisk.plist
2. 编辑文件如下
记住一定要将KeepAlive设置成true,否则launchd有可能并不会真正地去执行这个脚本,你用launchctl list看到com.yourname.ramdisk确实被load了,但是并没有PID.
3. 改变该文件的owner和权限
sudo chown -R root:wheel com.yourname.ramdisk.plist
sudo chmod 644 com.yourname.ramdisk.plist
4. reboot and bingo! you found ramdisk mounted. hurray!
注:
(1) launchctl是launchd的user interface
(2) 从osx 10.4 --> 10.5 --> 10.6 plist的规范都有些变化,比如在10.4中可以设置OnDemand,在10.6中OnDemand deprecated 所以就得设置KeepAlive.
(3) lingon可以很方便地帮助用户创建plist文件.
附: mount ramdisk的脚本,不保证没错