找回密码
 立即注册
首页 业界区 安全 Linux打包安装部署脚本例子

Linux打包安装部署脚本例子

蛟当罟 前天 15:22
在Linux系统中,我们经常需要创建脚本,然后将脚本上传到生产环境的服务器,部署脚本并进行授权,然后创建作业. 如果公司部署了Ansible自动化运维工具话,那么可以批量部署处理.如果没有Ansible这类自动化运维工具的话,我们可以通过脚本打包安装脚本,避免一台台服务器手工处理. 下面通过一个例子简单介绍一下.
打包脚本

上传脚本mysql_log_maint_monitor/install.sh/package.sh和配置文件db_monitor.json到指定目录.使用脚本package.sh进行打包
脚本package.sh如下所示:
  1. #!/bin/bash
  2. #########################################################################################
  3. #                                                                                       #
  4. # 此脚本为打包脚本,生成可分发脚本的安装包                                                  #
  5. #                                                                                       #
  6. # #######################################################################################
  7. #                                                                                       #
  8. # ScriptName            :    package.sh                                                 #
  9. # Author                :    潇湘隐者                                                    #
  10. # CerateDate            :    2026-08-15                                                 #
  11. # Blogs                 :    www.cnblogs.com/kerrycode                                  #
  12. # Email                 :    kerry2008code@qq.com                                       #
  13. #***************************************************************************************#
  14. # 参数配置                                                                              #
  15. #---------------------------------------------------------------------------------------#
  16. # 注意,此脚本可以作为通用的打包脚本使用,只需修改下面变量即可                           #
  17. #---------------------------------------------------------------------------------------#
  18. # PACKAGE_NAME    打包文件名称                                                          #
  19. # VERSION         脚本版本                                                              #
  20. # SCRIPT_NAME     脚本名                                                                #
  21. # INSTALL_SCRIPT  安装脚本名(install.sh)                                                #
  22. # Version        Modified Date            Description                                   #
  23. #***************************************************************************************#
  24. # V.1.0          2025-08-15              创建此脚本                                     #
  25. #########################################################################################
  26. # 定义包名和版本
  27. PACKAGE_NAME="mysql_log_maint_monitor"
  28. VERSION="2.1"
  29. OUTPUT_FILE="${PACKAGE_NAME}-${VERSION}.tar.gz"
  30. SCRIPT_NAME="mysql_log_maint_monitor"
  31. CONF_FILE="db_monitor.json"
  32. INS_SCRIPT_NAME="install.sh"
  33. readonly SUCCESS=0
  34. readonly FAILURE=1
  35. # 检查必要文件是否存在(可以定制/改写)
  36. if [ ! -f ${SCRIPT_NAME} ] || [ ! -f ${INS_SCRIPT_NAME} ]  || [ ! -f ${CONF_FILE} ] ; then
  37.     echo "warning:缺少必要的文件,请确保${SCRIPT_NAME},${INS_SCRIPT_NAME}, ${CONF_FILE} 这些文件存在!"
  38.     exit $FAILURE
  39. fi
  40. # 创建临时目录
  41. TMP_DIR=$(mktemp -d)
  42. mkdir -p $TMP_DIR/$PACKAGE_NAME
  43. # 复制文件到临时目录
  44. cp ${SCRIPT_NAME} $TMP_DIR/$PACKAGE_NAME/
  45. cp ${INS_SCRIPT_NAME} $TMP_DIR/$PACKAGE_NAME/
  46. cp ${CONF_FILE} $TMP_DIR/$PACKAGE_NAME/
  47. # 打包
  48. echo "正在创建安装包: $OUTPUT_FILE"
  49. if tar -czf $OUTPUT_FILE -C $TMP_DIR $PACKAGE_NAME ;
  50. then
  51.     echo "安装包创建成功: $OUTPUT_FILE"
  52. else
  53.         echo "安装报创建失败,请检查确认"
  54. fi
  55. # 清理临时文件
  56. rm -rf $TMP_DIR
  57. # 显示结果
  58. if [ -f "$OUTPUT_FILE" ]; then
  59.     echo "文件大小: $(du -h $OUTPUT_FILE | awk '{print $1}')"
  60. else
  61.     echo "安装包创建失败"
  62.     exit $FAILURE
  63. fi
复制代码
检查脚本package.sh中变量正确后(预先处理好,一般不会有问题),执行脚本package.sh打包文件,如下所示:
  1. $ sh package.sh
  2. 正在创建安装包: mysql_log_maint_monitor-2.1.tar.gz
  3. 安装包创建成功: mysql_log_maint_monitor-2.1.tar.gz
  4. 文件大小: 40K
复制代码
自动部署脚本

将文件mysql_log_maint_monitor-2.1.tar.gz上传后,按下面步骤执行,就会将脚本和配置文件拷贝指定目录,并授予相关权限,然后配置生成crontab作业.具体如下所示:
  1. [mysql@dbtest04 install]$ pwd
  2. /data/install
  3. [mysql@dbtest04 install]$ ls
  4. mysql_log_maint_monitor-2.1.tar.gz
  5. [mysql@dbtest04 install]$ pwd
  6. /data/install
  7. [mysql@dbtest04 install]$ tar -xzvf mysql_log_maint_monitor-2.1.tar.gz
  8. mysql_log_maint_monitor/
  9. mysql_log_maint_monitor/mysql_log_maint_monitor
  10. mysql_log_maint_monitor/install.sh
  11. mysql_log_maint_monitor/db_monitor.json
  12. [mysql@dbtest04 install]$ cd mysql_log_maint_monitor
  13. [mysql@dbtest04 mysql_log_maint_monitor]$ sh install.sh
  14. 正在部署脚本...
  15. 设置执行权限...
  16. /home/mysql/db_monitor/scripts/db_monitor.json脚本复制成功
  17. 配置定时任务...
  18. ------------------------------------------------------
  19. 安装成功!
  20. 脚本路径: /home/mysql/db_monitor/scripts/mysql_log_maint_monitor
  21. 定时任务: 每5分钟执行一次系统监控
  22. */5 * * * * /home/mysql/db_monitor/scripts/mysql_log_maint_monitor
  23. ------------------------------------------------------
  24. [mysql@dbtest04 mysql_log_maint_monitor]$ crontab -l
  25. ###################################MySQL error log##############################################
  26. */5 * * * * /home/mysql/db_monitor/scripts/mysql_log_maint_monitor
  27. ################################################################################################
  28. [mysql@dbtest04 mysql_log_maint_monitor]$
复制代码

其中脚本install.sh的定义如下所示:
  1. #!/bin/bash
  2. readonly SUCCESS=0
  3. readonly FAILURE=1
  4. # 定义变量
  5. DEST_DIR="/home/mysql/db_monitor/scripts"
  6. LOG_DIR="/home/mysql/db_monitor/logs"
  7. # 此参数为传入的变量赋值.
  8. SRC_SCRIPT_FILE="mysql_log_maint_monitor"
  9. SRC_CONF_FILE="db_monitor.json"
  10. DST_SCRIPT_FILE="${DEST_DIR}/${SRC_SCRIPT_FILE}"
  11. DST_CONF_FILE="${DEST_DIR}/${SRC_CONF_FILE}"
  12. # 检查是否以mysql用户运行脚本
  13. if [ "$(whoami)" != "mysql" ]; then
  14.     echo "错误:请使用mysql用户运行安装程序 (sh install.sh xxx)"
  15.     exit $FAILURE
  16. fi
  17. CURR_PATH=$(cd $(dirname $0) && pwd)
  18. if [ ! -f "${CURR_PATH}/${SRC_SCRIPT_FILE}" ];
  19. then
  20.     echo "文件${CURR_PATH}/${SRC_SCRIPT_FILE}不存在,请检查确认"
  21.     exit $FAILURE
  22. fi
  23. if [ ! -f "${CURR_PATH}/${SRC_CONF_FILE}" ];
  24. then
  25.     echo "文件${CURR_PATH}/${SRC_CONF_FILE}不存在,请检查确认"
  26.     exit $FAILURE
  27. fi
  28. # 创建部署安装目录(如果不存在)
  29. if [ ! -d ${DEST_DIR} ]; then
  30.     if mkdir -p ${DEST_DIR} ; then
  31.        echo "目录${DEST_DIR}创建成功"
  32.     else
  33.        echo "error:目录${DEST_DIR}创建失败"
  34.        exit $FAILURE
  35.     fi
  36. fi
  37. if [ ! -d ${LOG_DIR} ]; then
  38.     if mkdir -p ${LOG_DIR} ;
  39.     then
  40.         echo "目录${LOG_DIR}创建成功"
  41.     else
  42.         echo "error:目录${LOG_DIR}创建失败"
  43.         exit $FAILURE
  44.     fi
  45. fi
  46. # 复制脚本到目标目录
  47. echo "正在部署脚本..."
  48. # 检查复制是否成功
  49. if cp $SRC_SCRIPT_FILE $DST_SCRIPT_FILE ;
  50. then
  51.     # 授予执行权限
  52.     echo "设置执行权限..."
  53.     chmod +x $DST_SCRIPT_FILE
  54. else
  55.     echo "error:脚本复制失败"
  56.     exit $FAILURE
  57. fi
  58. if cp "$SRC_CONF_FILE" "$DST_CONF_FILE" ;
  59. then
  60.     echo "${DST_CONF_FILE}脚本复制成功"
  61. else
  62.     echo "error: 脚本复制失败"
  63.     exit $FAILURE
  64. fi
  65. # 配置定时任务
  66. echo "配置定时任务..."
  67. (crontab -l 2>/dev/null | grep -v -F "$DST_SCRIPT_FILE"; \
  68. echo "###################################MySQL error log##############################################"; \
  69. echo "*/5 * * * * $DST_SCRIPT_FILE" ;\
  70. echo "################################################################################################" \
  71. ) | crontab -
  72. # 验证安装
  73. if [ -f "$DST_SCRIPT_FILE" ] && [ -x "$DST_SCRIPT_FILE" ]; then
  74.     echo "------------------------------------------------------"
  75.     echo "安装成功!"
  76.     echo "脚本路径: $DST_SCRIPT_FILE"
  77.     echo "定时任务: 每5分钟执行一次系统监控"
  78.     crontab -l | grep "$DST_SCRIPT_FILE"
  79.     echo "------------------------------------------------------"
  80.    
  81. else
  82.     echo "安装部署失败,请检查错误信息"
  83.     exit $FAILURE
  84. fi
复制代码
注意事项:

1.此脚本如果重复执行的话, 有一个小bug,如下所示,作业的注释多了一行,暂时还未想到好的解决方法。不加注释能规避这个问题。但是又不想这样操作。
  1. [mysql@dbtest04 mysql_log_maint_monitor]$ sh install.sh
  2. 正在部署脚本...
  3. 设置执行权限...
  4. /home/mysql/db_monitor/scripts/db_monitor.json脚本复制成功
  5. 配置定时任务...
  6. ------------------------------------------------------
  7. 安装成功!
  8. 脚本路径: /home/mysql/db_monitor/scripts/mysql_log_maint_monitor
  9. 定时任务: 每5分钟执行一次系统监控
  10. */5 * * * * /home/mysql/db_monitor/scripts/mysql_log_maint_monitor
  11. ------------------------------------------------------
  12. [mysql@dbtest04 mysql_log_maint_monitor]$ crontab -l
  13. ###################################MySQL error log##############################################
  14. ################################################################################################
  15. ###################################MySQL error log##############################################
  16. */5 * * * * /home/mysql/db_monitor/scripts/mysql_log_maint_monitor
  17. ################################################################################################
复制代码
扫描上面二维码关注我如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册