使用launchd在系统启动时执行自定义任务

来源:互联网 发布:手机指纹加密软件 编辑:程序博客网 时间:2024/05/21 07:15

这个问题困扰了我好久,今天连续搞了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的脚本,不保证没错

原创粉丝点击