之前了解到MAC下的开机启动和定时自动运行不再沿用cron,而是有自己的launchctl:把启动文件放在/Library/LaunchDaemon/xxx.plist,里面可以记录运行的时间间隔、工作目录之类的。
我在公司的笔记本使用无线网,每次重启后IP可能会变,变了以后我在家里就找不到它了,为了解决这个问题,我让机器每隔一段时间执行ifconfig命令,并把结果输出到云同步盘上去。只要查一下同步盘上的记录,就知道ip了。我的com.binglen.ipmonitor.plist文件是这么写的:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.binglen.ipmonitor.plist</string> <key>ProgramArguments</key> <array> <string>/Users/palance/百度云同步盘/workdir/MsRemoteDesktop/ipmonitor.sh</string> </array> <key>KeepAlive</key> <false/> <key>RunAtLoad</key> <true/> <key>StartInterval</key> <integer>60</integer> <key>WorkingDirectory</key> <string>/Users/palance/百度云同步盘/workdir/MsRemoteDesktop/</string> </dict> </plist>
然后执行launchctl load /Library/LaunchDaemon/com.binglen.ipmonitor.plist,成功!
虽然脚本每分钟会执行,可是每次重启机器后发现不能自动起来。最后发现原来是权限的问题,在执行load之前需要执行如下命令:
sudo chown root com.binglen.ipmonitor.plist # 将plist文件权限修改为root sudo luanchctl load com.binglen.ipmonitor.plist # 以管理员权限运行
再次重启后,运行如下命令即可查看到正在运行的脚本:
$ sudo launchctl list|grep binglen - 0 com.binglen.ipmonitor.plist
不过我还是有一个遗留问题:当前非管理员也运行着若干launchctl脚本,前面的查看命令不敲sudo就可以看到这个list,他们也是开机启动的,怎么做到的呢?