Mac設(shè)置開(kāi)機(jī)啟動(dòng)
本文針對(duì)命令行使用的開(kāi)發(fā)工具或自己編寫(xiě)的腳本設(shè)置開(kāi)機(jī)啟動(dòng),圖形化界面的程序僅需要
設(shè)置->用戶與群組->登錄項(xiàng)中即可配置。
相比于Linux開(kāi)機(jī)啟動(dòng)設(shè)置的簡(jiǎn)單方便--配置rc.local文件即可,mac設(shè)置開(kāi)機(jī)啟動(dòng)略顯麻煩。
如果是使用homebrew安裝軟件自然不用考慮開(kāi)機(jī)啟動(dòng)這回事,但有時(shí)候想執(zhí)行自己的腳本或者有特殊需求,就不得不自己處理開(kāi)機(jī)啟動(dòng)了。
1. 使用登錄項(xiàng)添加可執(zhí)行腳本(推薦)
在用戶的家目錄編寫(xiě)一個(gè)sh腳本,例如:
test.sh
#!/bin/bash
# 在用戶的家目錄創(chuàng)建一個(gè)文件
touch ~/haha.txt
添加可執(zhí)行權(quán)限
chmod 755 test.sh
進(jìn)入設(shè)置->用戶與群組->登錄項(xiàng),點(diǎn)+號(hào),選擇test.sh文件即可。
重啟電腦,驗(yàn)證是否新建了文件,如存在說(shuō)明配置成功,修改該文件內(nèi)容為你想要的配置。
該文件將會(huì)在開(kāi)機(jī)時(shí)執(zhí)行,可在命令行中執(zhí)行的開(kāi)機(jī)啟動(dòng)項(xiàng)均可在此文件中配置。
PS: 開(kāi)機(jī)后會(huì)顯示一個(gè)“進(jìn)程已結(jié)束”的終端,不太爽,需要進(jìn)入終端的
偏好設(shè)置->shell選項(xiàng)卡->當(dāng)shell退出時(shí), 選擇“關(guān)閉窗口”。這樣開(kāi)機(jī)時(shí)就不會(huì)出現(xiàn)一個(gè)終端了
2. launchctl加載plist文件
macOS開(kāi)機(jī)啟動(dòng)一般使用launchctl加載plist文件
plist文件放置處:
~/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)
建議放在 ~/Library/LaunchAgents 下面。
下面再來(lái)理解幾個(gè)基礎(chǔ)概念:
/System/Library和/Library和~/Library目錄的區(qū)別?
/System/Library目錄是存放Apple自己開(kāi)發(fā)的軟件。
/Library目錄是系統(tǒng)管理員存放的第三方軟件。
~/Library/是用戶自己存放的第三方軟件。
LaunchDaemons和LaunchAgents的區(qū)別?
LaunchDaemons是用戶未登陸前就啟動(dòng)的服務(wù)(守護(hù)進(jìn)程)。
LaunchAgents是用戶登陸后啟動(dòng)的服務(wù)(守護(hù)進(jìn)程)。
plist文件示例
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example.exampled</string>
<key>ProgramArguments</key>
<array>
<string>exampled</string>
</array>
<key>KeepAlive</key>
<true/>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
launchd.plist的部分鍵值說(shuō)明,完整版見(jiàn)launchd.plist(5)
Label (必須)
該項(xiàng)服務(wù)的名稱
ProgramArguments
指定可執(zhí)行文件路徑及其參數(shù),比如執(zhí)行ls -a,對(duì)應(yīng)到該配置中,應(yīng)該寫(xiě)作:
<key>ProgramArguments</key>
<array>
<string>ls</string>
<string>-a</string>
</array>
RunAtLoad (可選)
標(biāo)識(shí)launchd在加載完該項(xiàng)服務(wù)之后立即啟動(dòng)路徑指定的可執(zhí)行文件。默認(rèn)值為 false,設(shè)置為 true 即可實(shí)現(xiàn)開(kāi)機(jī)運(yùn)行腳本文件。
StartCalendarInterval (可選)
該關(guān)鍵字可以用來(lái)設(shè)置定時(shí)執(zhí)行可執(zhí)行程序,可使用 Month, Day, Hour, Minute, Second等子關(guān)鍵字,它可以指定腳本在多少月,天,小時(shí),分鐘,秒,星期幾等時(shí)間上執(zhí)行,若缺少某個(gè)關(guān)鍵字則表示任意該時(shí)間點(diǎn),類似于 Unix 的 Crontab 計(jì)劃任務(wù)的設(shè)置方式,比如在該例子中設(shè)置為每小時(shí)的20分的時(shí)候執(zhí)行該命令。
KeepAlive(可選)
是否保持持續(xù)運(yùn)行
所有key關(guān)鍵字詳細(xì)使用說(shuō)明可以在Mac OS X終端下使用命令 man launchd.plist 查詢
檢查plist語(yǔ)法是否正確
plutil ~/Library/LaunchAgents/example.plist
載入配置, 使配置生效
launchctl load ~/Library/LaunchAgents/example.plist
卸載配置
launchctl unload ~/Library/LaunchAgents/example.plist
查看服務(wù)運(yùn)行狀態(tài)
launchctl list