2026年1月5日 星期一

Linux 開機時自動執行程式或指令

 在 Linux 開機時自動執行程式或指令,主要有幾種方法,最常見的是使用 Systemd 建立服務(現代主流)、修改 /etc/rc.local 檔案(傳統通用)、利用 cron 的 @reboot 指令,以及在 使用者登入時執行 ~/.bashrc / ~/.profile 或圖形化桌面環境的 XDG Autostart。選擇哪種方法取決於是在系統啟動時執行(Systemd 服務)、使用者登入時執行(XDG Autostart)或僅在特定使用者登入時執行(~/.bashrc)。 

1. 使用 Systemd 服務(推薦用於系統級任務)
這是現代 Linux 發行版(如 Ubuntu, CentOS 7+)管理服務和開機自啟動的標準方式。 
  1. 創建服務檔案:在 /etc/systemd/system/ 建立一個 .service 檔案,例如 my-app.service
  2. 內容
    [Unit]
    Description=My Application Service
    After=network.target # 依賴網絡,可根據需要調整
    
    [Service]
    ExecStart=/path/to/your/script.sh # 你的啟動指令或腳本
    Restart=always # 失敗時自動重啟
    
    [Install]
    WantedBy=multi-user.target # 系統多用戶模式啟動時執行
    
  3. 啟用服務
    bash
    sudo systemctl enable my-app.service # 開機自動啟動
    sudo systemctl start my-app.service  # 立即啟動
    
     
2. 修改 /etc/rc.local(傳統或簡單任務)
適用於舊版系統或只想在開機後期執行簡單指令。 
  1. 編輯檔案sudo nano /etc/rc.local
  2. 加入指令:在 exit 0 之前加入你的指令(使用絕對路徑),例如:
    bash
    /usr/local/bin/my-script.sh & # & 讓它在背景執行
    exit 0
    
  3. 確保可執行sudo chmod +x /etc/rc.local 
3. 使用 cron 的 @reboot
適合在每次重啟後簡單執行一個指令。 
  1. 編輯 crontabcrontab -e
  2. 加入指令
    @reboot /path/to/your/script.sh
    
     
4. 使用者登入時執行 (桌面環境)
  • For All Users (login shell):編輯 /etc/profile 或 /etc/profile.d/ 中的文件。
  • For Current User (login shell):編輯 ~/.bash_profile 或 ~/.profile
  • For Current User (open terminal):編輯 ~/.bashrc
  • Desktop Entry (GUI):在 ~/.config/autostart/ 放置 .desktop 檔案,用於啟動圖形化應用程式。 
執行權限
  • 所有腳本或程式都必須有執行權限,使用 chmod +x /path/to/script.sh
  • 在腳本中建議使用絕對路徑 
總結
  • Systemd:管理系統服務,最完整與現代。
  • rc.local:最簡單,但非標準化,適用於舊系統。
  • @reboot:適合快速重啟後執行一次性任務。
  • .bashrc / Autostart:針對特定使用者或圖形介面。 

沒有留言:

張貼留言