非 Web Java 應用部署時,一個健壯的啟動腳本能省去大量手工配置麻煩。本文提出標準目錄結構與通用 startup.sh 模板,實現第三方 JAR 自動掃描、編碼設置、後台守護進程啟動。
myapp/
├── bin/ # 啟動腳本
├── lib/ # 所有第三方 JAR
├── packages/ # 專案類文件根目錄(包結構)
└── config/ # 配置文件
#!/bin/sh
programdir="."
# 1. 保留原 CLASSPATH
temp=$CLASSPATH
# 2. 掃描 lib/*.jar 追加到 CLASSPATH
append() { temp="$temp:$1"; }
for file in ../lib/*; do append "$file"; done
# 3. 加入當前目錄、父目錄、packages 根目錄
export CLASSPATH="$temp:.:../:$programdir"
# 4. 設置語系防止中文亂碼
export LANG=zh_CN
# 5. 後台守護啟動,輸出重定向到 nohup.out
nohup java -classpath $CLASSPATH com.example.Main &
nohup:忽略掛斷信號,進程不隨終端關閉而退出,標準輸出/錯誤追加至 nohup.out。&:後台運行,釋放終端。CLASSPATH 動態拼接:避免每次新增 JAR 都要改腳本。JAVA_OPTS 統一管理 JVM 參數(堆大小、GC、JMX 等)。start|stop|restart|status 子命令,整合 kill 與 ps 實現完整生命週期管理。startup.bat 或使用 Procrun 安裝為服務。