Java 應用 Linux 部署運維的高頻命令集,覆蓋進程管理、日誌實時查看、軟鏈接操作、端口佔用排查,附 Windows 端口排查對照,適合運維手冊收藏。
| 操作 | 命令 | 說明 |
|---|---|---|
| 查看進程 | ps -ef | grep tomcat | 顯示完整啟動參數、PID、用戶 |
| 優雅關閉 | ./shutdown.sh | 在 Tomcat bin 目錄執行,觸發鉤子釋放資源 |
| 強制殺死 | kill -9 <PID> | 最後手段,-9 為 SIGKILL,不可捕獲 |
| 啟動後台 | nohup ./startup.sh > /dev/null 2>&1 & | 免掛起、輸出重定向、後台運行 |
| 查看啟動日誌 | tail -f logs/catalina.out | 實時跟蹤,Ctrl+C 退出跟蹤不關閉進程 |
# 最後 100 行
tail -n 100 logs/catalina.out
# 關鍵字過濾 (高亮)
tail -f logs/catalina.out | grep --color=auto "ERROR\|Exception"
# 多文件合併跟蹤
tail -f logs/catalina.out logs/localhost_access_log.*
# 保存最近錯誤
grep "ERROR" logs/catalina.out > /tmp/errors_$(date +%F).log
# 創建:ln -s 目標路徑 鏈接路徑
ln -s /home/gamestat /gamestat
# 效果:cd /gamestat 實際進入 /home/gamestat
# 關鍵規則:
# 1. 目標路徑 (源) 必須已存在
# 2. 鏈接路徑 (目標) 必須不存在 (父目錄需存在)
# 3. 使用絕對路徑,避免相對路徑在不同工作目錄下失效
# 刪除軟鏈接 (勿加斜杠!)
rm -rf /gamestat # 正確:刪除鏈接文件本身
# rm -rf /gamestat/ # 錯誤:會遞歸刪除目標目錄內容!
# 查看鏈接詳情
ls -l /gamestat
# 輸出:lrwxrwxrwx 1 root root 14 Jan 1 10:00 /gamestat -> /home/gamestat
# 查看端口佔用進程 (需 root 權限看所有)
netstat -tlnp | grep :8080
ss -tlnp | grep :8080 # 現代替代,更快
# 輸出示例:
# tcp LISTEN 0 100 :::8080 :::* users:(("java",pid=1234,fd=45))
# kill -9 1234
# 1. 查看端口佔用
netstat -ano | findstr :8080
# 輸出:TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 1234
# 2. 任務管理器 → 詳情 → PID 列 → 找到 1234 → 結束任務
# 或命令行強制結束
taskkill /PID 1234 /F
#!/bin/bash
# deploy.sh
APP_NAME=myapp
TOMCAT_HOME=/opt/tomcat
WAR_PATH=/home/deploy/${APP_NAME}.war
echo "=== 停止舊服務 ==="
PID=$(ps -ef | grep ${TOMCAT_HOME} | grep -v grep | awk '{print $2}')
[ -n "$PID" ] && kill -9 $PID && echo "Killed $PID"
echo "=== 備份舊版 ==="
[ -f ${TOMCAT_HOME}/webapps/${APP_NAME}.war ] && mv ${TOMCAT_HOME}/webapps/${APP_NAME}.war ${TOMCAT_HOME}/webapps/${APP_NAME}.war.bak.$(date +%F)
echo "=== 部署新版 ==="
cp ${WAR_PATH} ${TOMCAT_HOME}/webapps/
echo "=== 啟動服務 ==="
cd ${TOMCAT_HOME}/bin && nohup ./startup.sh > /dev/null 2>&1 &
echo "=== 等待啟動並驗證 ==="
sleep 10
tail -n 50 ${TOMCAT_HOME}/logs/catalina.out | grep -i "Server startup"
熟練掌握 ps/grep/kill/tail/ln/rm/netstat/ss/taskkill 等核心命令,構建標準化部署腳本,是 Java 開發者向 DevOps 邁進的必修課。
鐵律:
✅ 優雅關閉 > 強制殺死;
✅ 軟鏈接刪除 不加斜杠;
✅ 端口排查 ss 替代 netstat;
✅ 關鍵操作留存腳本,人工操作零信任。