VPS 斷線重啟也不怕:使用 Bash 與 Crontab 實現服務自動復原實戰
2026-03-10 23:25:00 未分類
對於租用 VPS 的開發者來說,「服務商無預警重啟」是維運中常見的挑戰。每次重啟後,手動 SSH 進入伺服器重新建立 Screen、啟動 Docker、進入虛擬環境,不僅耗時且容易遺漏步驟。本文將分享如何透過 Bash 腳本搭配 Crontab,實現全自動復原。
🛠 核心需求分析
我們需要自動化完成以下動作:
- 環境隔離:建立多個獨立的 screen 會話。
- 自動構建與部署:進入目錄、執行 docker build 並啟動容器。
- 環境預熱:在另一個視窗自動啟動 Python 虛擬環境 (.venv)。
📜 自動化腳本實作:autostart.sh
請在你的家目錄下建立 autostart.sh。此腳本利用 screen -dmS 指令在背景直接開啟會話。
完整 autostart.sh 腳本內容如下
#!/bin/bash
# 定義路徑
PROJECT_PATH="/home/hcc/ramdisk/ark-trader-gateio"
# 1. 處理第一個 Screen: bot-gateio
# -d -m 表示在後台開啟 screen,不直接進入
screen -dmS bot-gateio bash -c "
cd $PROJECT_PATH && \
docker build --no-cache -t trading-bot-gateio . && \
docker run --rm -it \
--env-file .env \
-v \$(pwd)/trading_bot/config:/app/trading_bot/config \
-v \$(pwd)/logs:/app/logs \
trading-bot-gateio
"
# 2. 處理第二個 Screen: cli-gateio
screen -dmS cli-gateio bash -c "
cd $PROJECT_PATH && \
source ./.venv/bin/activate && \
exec bash
"
# 注意:最後加上 exec bash 是為了讓虛擬環境啟動後,screen 視窗不會因為指令結束而自動關閉
⚠️ 避坑指南:解決「cannot execute」報錯
在 Linux 上執行腳本時,若出現 -bash: ./autostart.sh: cannot execute: required file not found,這通常是 Windows 的 \r (CRLF) 換行符號造成的。
解決方案:使用 sed 進行格式轉換
- 執行
sed -i 's/\r$//' autostart.sh。 - 執行
chmod +x autostart.sh賦予權限。
🚀 設定開機自動執行
使用 crontab -e 進入編輯模式,並在最下方加入一行:
@reboot /home/hcc/autostart.sh
💡 驗證與調試
系統重啟後,使用 screen -ls 確認會話是否在線,並可透過 screen -r bot-gateio 觀察運行狀態。