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