Mac設(shè)置開機(jī)啟動項(xiàng)
由于最近使用到開機(jī)自啟動以及定時任務(wù)的開啟,在采坑的同事記錄一下Mac自啟動的以及定時任務(wù)開啟的正確姿勢
Mac 開機(jī)自啟動以及定時任務(wù)設(shè)置方式
- 使用登錄項(xiàng)添加可執(zhí)行的腳本(此處不做介紹轰枝,注意添加可執(zhí)行權(quán)限即可(chmod 777 ..sh))
- launchctl加載plist文件
- crontab添加可執(zhí)行文件以及腳本
launchctl加載plist文件
Mac開機(jī)啟動大部分會使用launchctl加載文件,launchctl 通過 plist 屬性列表(Property List)配置鞍陨。
plist文件位置以及相關(guān)權(quán)限
~/Library/LaunchAgents 由用戶自己定義的任務(wù)項(xiàng)
/Library/LaunchAgents 由管理員為用戶定義的任務(wù)項(xiàng)
/Library/LaunchDaemons 由管理員定義的守護(hù)進(jìn)程任務(wù)項(xiàng)
/System/Library/LaunchAgents 由Mac OS X為用戶定義的任務(wù)項(xiàng)
/System/Library/LaunchDaemons 由Mac OS X定義的守護(hù)進(jìn)程任務(wù)項(xiàng)
LaunchDaemons和LaunchAgents的區(qū)別诚撵?
LaunchDaemons是用戶未登陸前就啟動的服務(wù),即開機(jī)即可啟動
LaunchAgents使用戶登陸后啟動的服務(wù)
具體plist設(shè)置蘋果官方教材,以下示例:
<?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>cn.GY.tasklogout</string>
<key>ProgramArguments</key>
<array>
<string>/Applications/ATSign.app/Contents/MacOS/ATSign</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Minute</key>
<integer>30</integer>
<key>Hour</key>
<integer>9</integer>
<key>Day</key>
<integer>1</integer>
<key>Month</key>
<integer>5</integer>
<!-- 0和7都指星期天 -->
<key>Weekday</key>
<integer>0</integer>
**<key>Minute</key>
<string>01</string>
<key>Hour</key>
<string>18</string>**
</dict>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
注意: 在--區(qū)間的設(shè)置時間點(diǎn)的plist的key,此處必須為integer,而非string,剛開始使用string會造成app一直無限自啟動,后來查文檔發(fā)現(xiàn)是integer,才解決了這個問題砾脑。
部分鍵值說明
- Label
服務(wù)的名稱,不可重復(fù),可與當(dāng)前plist文件名一致 - Program
需要啟動的程序(可不設(shè)置ProgramArguments) - ProgramArguments
-startup開機(jī)啟動 - StartCalendarInterval
此處設(shè)置具體時分秒以及工作日等相關(guān)信息的設(shè)置,注意key值類型相照應(yīng),如果不設(shè)置會默認(rèn)任意時間點(diǎn)啟動
Mac通過launchctl加載plist的相關(guān)命令
- 檢查plist語法是否正確
plutil ~/Library/LaunchAgents/demo.plist
- 加載配置文件,使配置文件生效
launchctl load ~/Library/LaunchAgents/demo.plist
- 取消當(dāng)前配置文件的進(jìn)程
launchctl unload ~/Library/LaunchAgents/demo.plist
- 查看當(dāng)前你服務(wù)是否加入
launchctl list 所有服務(wù)
launchctl list | grep demo 過濾后的服務(wù)
- 如果加載服務(wù)后,再次修改該服務(wù)plist文件,可通過取消當(dāng)前配置在加載當(dāng)前配置的方式修改服務(wù)
launchctl unload
launchctl load
crontab執(zhí)行腳本文件等
編輯自定義自己的任務(wù)
crontab -e
13 15 * * * /usr/local/bin/python2.7
/Users/macprohz/Desktop/Python/WebAppDemo/GY.py
添加編輯wq保存即可, 以上代表意義:在15:30分啟動python腳本GY.py
時間格式
* * * * * command
分 時 日 月 周 命令
第1列表示分鐘1~59 每分鐘用或者 /1表示
第2列表示小時1~23(0表示0點(diǎn))
第3列表示日期1~31
第4列表示月份1~12
第5列標(biāo)識號星期0~6(0表示星期天)
5個*表示每分鐘
*表示每分鐘/時/日/月/周
/n表示每隔n分鐘/時/日/月整/周
每個時間位多個數(shù)值用逗號隔開: * * * 0,1,2,3,4,5就表示除了周六以外的每一分鐘
“*”代表取值范圍內(nèi)的數(shù)字,
“/”代表”每”,
“-”代表從某個數(shù)字到某個數(shù)字,
“,”分開幾個離散的數(shù)字
crontab的一些終端命令
ps aux | grep cron :查看服務(wù)是否已經(jīng)運(yùn)行用
crontab -e:編輯當(dāng)前用戶crontab任務(wù),保存退出后自動加到crontab列表中執(zhí)行
crontab -l :查看當(dāng)前用戶所有crontab 列表
crontab -r :刪除當(dāng)前用戶所有crontab 列表
總結(jié):此文僅為記錄Mac下的啟動方式,防止個人用到時又要無休止的goole,大部分資源還是很早之前的,特此記錄(GiantForJade)畅铭。