在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 #
# Blogs : www.cnblogs.com/kerrycode #
# 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打包文件,如下所示:
$ 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
1.此脚本如果重复执行的话, 有一个小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
################################################################################################
扫描上面二维码关注我
如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
参与评论
手机查看
返回顶部