MacOS添加自啟動腳本

MacOS下添加自啟動腳本有很多方法, 在一篇知乎文章中了解到Launchd替代了過去的init, rc, init.d, rc.d, SystemStarter, inted/xinetd, watchdogd等, 建議用Launchd.
當(dāng)然還有別的Automator, Apple Script等方式(底層未研究), 感興趣的自己搜索, 我選擇了直接Launchd, 結(jié)合so上的這篇文章:

  1. 編寫自己的腳本, 添加可執(zhí)行權(quán)限chmod a+x myscript.sh
  2. 編寫Launchd配置文件(.plist文件)
  3. 結(jié)合上述兩篇文章, 確定在系統(tǒng)啟動還是用戶啟動時運行腳本, 我選擇的是用戶目錄(~/Library/LaunchAgents/)
  4. load這個配置: launchctl load -w ~/Library/LaunchAgents/com.service.name.plist
  5. 登入登出測試, 或: launchctl start com.service.name

注:

  1. 可執(zhí)行腳本里的路徑有空格需要轉(zhuǎn)義
  2. 但plist文件里<string>標(biāo)簽里的目錄如果有空格, 不需要轉(zhuǎn)義
  3. load-w參數(shù)參見這篇文章
  4. 如果出錯, 運行Console應(yīng)用查看日志, 或參考這篇文章, 定向日志輸出文件
    即在.plist文件里添加:
<key>StandardOutPath</key>
<string>/var/log/mylog.log</string>

附: .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.service.name</string>
        <key>ProgramArguments</key>
        <array>
            <string>/path/to/my/script.sh</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

如果執(zhí)行的腳本就一句話, 你可能希望直接在.plist文件里運行, 而不是額外再多生成一個腳本吧? (source)

<key>ProgramArguments</key>
<array>
        <string>/bin/bash</string>
        <string>-c</string>
        <string>ls -1 | grep *.txt | echo &gt; allTextFiles</string>
</array>

繼續(xù), 如果還想以root來執(zhí)行腳本, 綜合起來, 我的實現(xiàn)如下:

cp com.run.udp2raw.plist /Library/LaunchDaemons
cd /Library/LaunchDaemons
sudo launchctl load -w com.run.udp2raw.plist
sudo launchctl start com.run.udp2raw

其中udp2raw對應(yīng)的命令是需要root權(quán)限的, 實測通過. 我選擇的是/Library/LaunchDaemons/

注: 唯一要注意的地方, 就是最后兩行, loadstart命令都需要加sudo. 沒有加的時候沒有報錯, 但是沒有運行成功.

附: folders and usage

|------------------|-----------------------------------|---------------------------------------------------|
| User Agents      | ~/Library/LaunchAgents            | Currently logged in user
|------------------|-----------------------------------|---------------------------------------------------|
| Global Agents    | /Library/LaunchAgents             | Currently logged in user
|------------------|-----------------------------------|---------------------------------------------------|
| Global Daemons   | /Library/LaunchDaemons            | root or the user specified with the key UserName
|------------------|-----------------------------------|---------------------------------------------------|
| System Agents    | /System/Library/LaunchAgents      | Currently logged in user
|------------------|-----------------------------------|---------------------------------------------------|
| System Daemons   | /System/Library/LaunchDaemons     | root or the user specified with the key UserName
|------------------|-----------------------------------|---------------------------------------------------|
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Login Items Mac OSX的當(dāng)前用戶成功登錄后啟動的程序,該類別的啟動項配置文件存放在~/Librar...
    貳爺閱讀 5,565評論 0 0
  • 0.準(zhǔn)備知識 Launchd是Darwin核心啟動后所調(diào)用的第一個也是唯一一個進(jìn)程,剩下所有的系統(tǒng)服務(wù)和用戶進(jìn)程都...
    ljjkerwin閱讀 3,148評論 0 0
  • 最近準(zhǔn)備著手搭建一些方便團隊開發(fā)工作順利進(jìn)行的工具平臺,首先就從Jenkins打包開始吧。其實關(guān)于ios的自動化打...
    路_遠(yuǎn)方閱讀 1,134評論 1 1
  • 創(chuàng)建定時任務(wù)主要就是為了每天固定運行一下腳本之類的。比如cocoapods倉庫每天總是有新的第三方庫提交,那么po...
    齊滇大圣閱讀 6,883評論 1 9
  • 希望是什么?未來自己的某種狀態(tài)。 沒有希望,會讓你感覺自己活著就像是茶幾,擺滿了悲劇。 希望是隨隨便便來的?還是努...
    魏_7dbf閱讀 73評論 0 0

友情鏈接更多精彩內(nèi)容