之前了解到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,他們也是開機啟動的,怎么做到的呢?
