Linux打包安裝部署腳本例子
2025-09-17 17:09 瀟湘隱者 閱讀(25) 評論(0) 收藏 舉報在Linux系統中,我們經常需要創建腳本,然后將腳本上傳到生產環境的服務器,部署腳本并進行授權,然后創建作業. 如果公司部署了Ansible自動化運維工具話,那么可以批量部署處理.如果沒有Ansible這類自動化運維工具的話,我們可以通過腳本打包/安裝/部署腳本,避免一臺臺服務器手工處理. 下面通過一個例子簡單介紹一下.
打包腳本
上傳腳本mysql_log_maint_monitor/install.sh/package.sh和配置文件db_monitor.json到指定目錄.使用腳本package.sh進行打包
腳本package.sh如下所示:
#!/bin/bash
#########################################################################################
# #
# 此腳本為打包腳本,生成可分發腳本的安裝包 #
# #
# #######################################################################################
# #
# ScriptName : package.sh #
# Author : 瀟湘隱者 #
# CerateDate : 2026-08-15 #
# Email : kerry2008code@qq.com #
#***************************************************************************************#
# 參數配置 #
#---------------------------------------------------------------------------------------#
# 注意,此腳本可以作為通用的打包腳本使用,只需修改下面變量即可 #
#---------------------------------------------------------------------------------------#
# PACKAGE_NAME 打包文件名稱 #
# VERSION 腳本版本 #
# SCRIPT_NAME 腳本名 #
# INSTALL_SCRIPT 安裝腳本名(install.sh) #
# Version Modified Date Description #
#***************************************************************************************#
# V.1.0 2025-08-15 創建此腳本 #
#########################################################################################
# 定義包名和版本
PACKAGE_NAME="mysql_log_maint_monitor"
VERSION="2.1"
OUTPUT_FILE="${PACKAGE_NAME}-${VERSION}.tar.gz"
SCRIPT_NAME="mysql_log_maint_monitor"
CONF_FILE="db_monitor.json"
INS_SCRIPT_NAME="install.sh"
readonly SUCCESS=0
readonly FAILURE=1
# 檢查必要文件是否存在(可以定制/改寫)
if [ ! -f ${SCRIPT_NAME} ] || [ ! -f ${INS_SCRIPT_NAME} ] || [ ! -f ${CONF_FILE} ] ; then
echo "warning:缺少必要的文件,請確保${SCRIPT_NAME},${INS_SCRIPT_NAME}, ${CONF_FILE} 這些文件存在!"
exit $FAILURE
fi
# 創建臨時目錄
TMP_DIR=$(mktemp -d)
mkdir -p $TMP_DIR/$PACKAGE_NAME
# 復制文件到臨時目錄
cp ${SCRIPT_NAME} $TMP_DIR/$PACKAGE_NAME/
cp ${INS_SCRIPT_NAME} $TMP_DIR/$PACKAGE_NAME/
cp ${CONF_FILE} $TMP_DIR/$PACKAGE_NAME/
# 打包
echo "正在創建安裝包: $OUTPUT_FILE"
if tar -czf $OUTPUT_FILE -C $TMP_DIR $PACKAGE_NAME ;
then
echo "安裝包創建成功: $OUTPUT_FILE"
else
echo "安裝報創建失敗,請檢查確認"
fi
# 清理臨時文件
rm -rf $TMP_DIR
# 顯示結果
if [ -f "$OUTPUT_FILE" ]; then
echo "文件大小: $(du -h $OUTPUT_FILE | awk '{print $1}')"
else
echo "安裝包創建失敗"
exit $FAILURE
fi
檢查腳本package.sh中變量正確后(預先處理好,一般不會有問題),執行腳本package.sh打包文件,如下所示:
```bash
$ sh package.sh
正在創建安裝包: mysql_log_maint_monitor-2.1.tar.gz
安裝包創建成功: mysql_log_maint_monitor-2.1.tar.gz
文件大小: 40K
自動部署腳本
將文件mysql_log_maint_monitor-2.1.tar.gz上傳后,按下面步驟執行,就會將腳本和配置文件拷貝指定目錄,并授予相關權限,然后配置生成crontab作業.具體如下所示:
[mysql@dbtest04 install]$ pwd
/data/install
[mysql@dbtest04 install]$ ls
mysql_log_maint_monitor-2.1.tar.gz
[mysql@dbtest04 install]$ pwd
/data/install
[mysql@dbtest04 install]$ tar -xzvf mysql_log_maint_monitor-2.1.tar.gz
mysql_log_maint_monitor/
mysql_log_maint_monitor/mysql_log_maint_monitor
mysql_log_maint_monitor/install.sh
mysql_log_maint_monitor/db_monitor.json
[mysql@dbtest04 install]$ cd mysql_log_maint_monitor
[mysql@dbtest04 mysql_log_maint_monitor]$ sh install.sh
正在部署腳本...
設置執行權限...
/home/mysql/db_monitor/scripts/db_monitor.json腳本復制成功
配置定時任務...
------------------------------------------------------
安裝成功!
腳本路徑: /home/mysql/db_monitor/scripts/mysql_log_maint_monitor
定時任務: 每5分鐘執行一次系統監控
*/5 * * * * /home/mysql/db_monitor/scripts/mysql_log_maint_monitor
------------------------------------------------------
[mysql@dbtest04 mysql_log_maint_monitor]$ crontab -l
###################################MySQL error log##############################################
*/5 * * * * /home/mysql/db_monitor/scripts/mysql_log_maint_monitor
################################################################################################
[mysql@dbtest04 mysql_log_maint_monitor]$

其中腳本install.sh的定義如下所示:
#!/bin/bash
readonly SUCCESS=0
readonly FAILURE=1
# 定義變量
DEST_DIR="/home/mysql/db_monitor/scripts"
LOG_DIR="/home/mysql/db_monitor/logs"
# 此參數為傳入的變量賦值.
SRC_SCRIPT_FILE="mysql_log_maint_monitor"
SRC_CONF_FILE="db_monitor.json"
DST_SCRIPT_FILE="${DEST_DIR}/${SRC_SCRIPT_FILE}"
DST_CONF_FILE="${DEST_DIR}/${SRC_CONF_FILE}"
# 檢查是否以mysql用戶運行腳本
if [ "$(whoami)" != "mysql" ]; then
echo "錯誤:請使用mysql用戶運行安裝程序 (sh install.sh xxx)"
exit $FAILURE
fi
CURR_PATH=$(cd $(dirname $0) && pwd)
if [ ! -f "${CURR_PATH}/${SRC_SCRIPT_FILE}" ];
then
echo "文件${CURR_PATH}/${SRC_SCRIPT_FILE}不存在,請檢查確認"
exit $FAILURE
fi
if [ ! -f "${CURR_PATH}/${SRC_CONF_FILE}" ];
then
echo "文件${CURR_PATH}/${SRC_CONF_FILE}不存在,請檢查確認"
exit $FAILURE
fi
# 創建部署安裝目錄(如果不存在)
if [ ! -d ${DEST_DIR} ]; then
if mkdir -p ${DEST_DIR} ; then
echo "目錄${DEST_DIR}創建成功"
else
echo "error:目錄${DEST_DIR}創建失敗"
exit $FAILURE
fi
fi
if [ ! -d ${LOG_DIR} ]; then
if mkdir -p ${LOG_DIR} ;
then
echo "目錄${LOG_DIR}創建成功"
else
echo "error:目錄${LOG_DIR}創建失敗"
exit $FAILURE
fi
fi
# 復制腳本到目標目錄
echo "正在部署腳本..."
# 檢查復制是否成功
if cp $SRC_SCRIPT_FILE $DST_SCRIPT_FILE ;
then
# 授予執行權限
echo "設置執行權限..."
chmod +x $DST_SCRIPT_FILE
else
echo "error:腳本復制失敗"
exit $FAILURE
fi
if cp "$SRC_CONF_FILE" "$DST_CONF_FILE" ;
then
echo "${DST_CONF_FILE}腳本復制成功"
else
echo "error: 腳本復制失敗"
exit $FAILURE
fi
# 配置定時任務
echo "配置定時任務..."
(crontab -l 2>/dev/null | grep -v -F "$DST_SCRIPT_FILE"; \
echo "###################################MySQL error log##############################################"; \
echo "*/5 * * * * $DST_SCRIPT_FILE" ;\
echo "################################################################################################" \
) | crontab -
# 驗證安裝
if [ -f "$DST_SCRIPT_FILE" ] && [ -x "$DST_SCRIPT_FILE" ]; then
echo "------------------------------------------------------"
echo "安裝成功!"
echo "腳本路徑: $DST_SCRIPT_FILE"
echo "定時任務: 每5分鐘執行一次系統監控"
crontab -l | grep "$DST_SCRIPT_FILE"
echo "------------------------------------------------------"
else
echo "安裝部署失敗,請檢查錯誤信息"
exit $FAILURE
fi
注意事項:
- 此腳本如果重復執行的話, 有一個小bug,如下所示,作業的注釋多了一行,暫時還未想到好的解決方法。不加注釋能規避這個問題。但是又不想這樣操作。
[mysql@dbtest04 mysql_log_maint_monitor]$ sh install.sh
正在部署腳本...
設置執行權限...
/home/mysql/db_monitor/scripts/db_monitor.json腳本復制成功
配置定時任務...
------------------------------------------------------
安裝成功!
腳本路徑: /home/mysql/db_monitor/scripts/mysql_log_maint_monitor
定時任務: 每5分鐘執行一次系統監控
*/5 * * * * /home/mysql/db_monitor/scripts/mysql_log_maint_monitor
------------------------------------------------------
[mysql@dbtest04 mysql_log_maint_monitor]$ crontab -l
###################################MySQL error log##############################################
################################################################################################
###################################MySQL error log##############################################
*/5 * * * * /home/mysql/db_monitor/scripts/mysql_log_maint_monitor
################################################################################################
微信公眾號保存時,會將代碼中部分空格給刪除(暫時不清楚具體原因),你會看到部分代碼中兩個單詞之間沒有了空格,無法一一糾正,如需完整的代碼,請查看原文或從百度網盤獲取:
鏈接: https://pan.baidu.com/s/1L7LKQFT0CmCaEIqFgAbBtA
提取碼: 9q3b
掃描上面二維碼關注我
如果你真心覺得文章寫得不錯,而且對你有所幫助,那就不妨幫忙“推薦"一下,您的“推薦”和”打賞“將是我最大的寫作動力!
本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接.
浙公網安備 33010602011771號