首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Linux 開機自動執行 Shell 腳本完整指南(用戶登入後)

     編輯:程式設計疑難解答

需求:在 Linux 系統啟動、用戶登入桌面環境後,自動執行特定 Shell 腳本啟動後台服務。本文區分「系統級開機」與「用戶級登入」兩種場景,提供標準做法與避坑指南。

場景區分:你到底需要哪一種?

場景觸發時機權限典型用途
系統級開機核心載入完成、進入 runlevel/target 前root系統服務、資料庫、網路配置
用戶級登入用戶圖形介面/Shell 登入成功後該用戶桌面自啟應用、用戶級代理、開發環境啟動

方案一:用戶登入自動執行(符合題目需求)

1. 桌面環境自啟標準

遵循 Freedesktop Autostart Specification,建立 .desktop 檔案:

mkdir -p ~/.config/autostart
cat > ~/.config/autostart/myscript.desktop <<'EOF'
[Desktop Entry]
Type=Application
Exec=/home/user/scripts/startup.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=MyStartupScript
Comment=Run user script after login
EOF

適用:GNOME、KDE、XFCE、MATE 等主流桌面。

2. Shell 配置檔

編輯 ~/.bashrc 或 ~/.profile(登入 Shell 執行):

# ~/.bashrc 尾部新增
if [ -f ~/scripts/startup.sh ]; then
    ~/scripts/startup.sh &
fi

注意:.bashrc 互動式 Shell 每次開啟終端機都會跑,建議加守衛判斷或改用 .profile(僅登入一次)。

3. systemd --user 服務(現代、健壯)

# ~/.config/systemd/user/myscript.service
[Unit]
Description=My User Startup Script
After=graphical-session.target

[Service]
Type=simple
ExecStart=/home/user/scripts/startup.sh
Restart=on-failure

[Install]
WantedBy=default.target

啟用:

systemctl --user daemon-reload
systemctl --user enable myscript.service
systemctl --user start myscript.service

優點:依賴管理、日誌整合、重啟策略、狀態查詢。

方案二:系統開機自動執行(補充參考)

/etc/init.d/ 傳統方式(題目最佳回答)

sudo cp startup.sh /etc/init.d/myscript
sudo chmod +x /etc/init.d/myscript
# SysVinit 風格
sudo update-rc.d myscript defaults  # Debian/Ubuntu
sudo chkconfig --add myscript       # CentOS/RHEL 6

# systemd 現代方式(推薦)
sudo cp myscript.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable myscript.service

腳本撰寫關鍵注意事項

  • Shebang:#!/bin/bash 指定解釋器。
  • 絕對路徑:腳本內所有命令、檔案路徑使用絕對路徑(環境變數 $PATH 可能未完全載入)。
  • 環境變數:明確 export 所需變數,或 source /etc/profile。
  • 後台執行:長期運行進程用 nohup cmd >/dev/null 2>&1 & 或 systemd 管理。
  • 日誌導向:標準輸出/錯誤重導向至檔案 >/var/log/myscript.log 2>&1,便於除錯。

常見坑與排查

依據「系統級」或「用戶級」需求選擇對應方案,採用 systemd 現代化管理,配合良好腳本習慣,即可穩定實現開機/登入自動化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
現象原因對策
腳本不執行無執行權限、路徑錯誤、Shebang 缺失chmod +x、絕對路徑、加 Shebang
環境變數缺失非登入 Shell、cron 環境極簡腳本內 source profile、設定完整 PATH
圖形應用無法啟動無 DISPLAY、Xauthoritysystemd --user、設定 DISPLAY=:0、XAUTHORITY