多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
在编写流程部署文件时,大部分部署功能都应在脚本中实现,脚本先验证部署通过后,再放到部署工具中使用。部署脚本在linux中使用shell编写,windows中使用bat脚本编写。具体shell及bat的语法不在这里介绍(读者请自己学习)。下面是linux下安装mysql的脚本示例: ```shell #!/bin/bash #安装mysql BASE_DIR=$(dirname $(pwd)) MYSQL_HOME=${BASE_DIR}/software/mariadb COMMON_HOME=${BASE_DIR}/install/scripts/linux/common db_password=$1 AUTO_RUN_FILE=${MYSQL_HOME}/support-files/mysql.server AUTO_RUN_FILE_NAME=mysqld #安装mysql的依赖包 if [[ $MYSQLDB_HAS_INSTALL != "y" ]];then #1.安装依赖 yum install -y cmake gcc gcc-c++ ncurses ncurses-devel openssl openssl-devel perl #2.创建mysql用户,查看是否有mysql用户,没有则创建 grep mysql /etc/passwd &>/dev/null if [ "$?" -ne 0 ];then useradd mysql fi #授权mysql用户的mysql目录权限 chown -R mysql:mysql ${MYSQL_HOME} #3.创建数据库文件 echo -n "正在安装mysql数据库....." cd ${MYSQL_HOME} && ./scripts/mysql_install_db --defaults-file=${MYSQL_HOME}/my.cnf &>/dev/null & while true do ps -ef | grep -w mysql_install_db | grep -v "grep" &>/dev/null if [ "$?" -ne 0 ];then echo "[ok]" break else echo -n "....." sleep "0.5" fi done #启动mysql cd ${MYSQL_HOME} && ./bin/mysqld_safe --defaults-file=${MYSQL_HOME}/my.cnf &>/dev/null & echo -n "正在启动mysql" while true do if [ ! -e ${MYSQL_HOME}/var/mysqld.pid ];then echo -n "........" sleep "0.5" else break fi done echo "[ok]" #开机自启动 \cp -f ${MYSQL_HOME}/my.cnf /etc/my.cnf bash ${COMMON_HOME}/set_auto_start.sh ${AUTO_RUN_FILE} ${AUTO_RUN_FILE_NAME} # Update root passwd CMD_MYSQL="${MYSQL_HOME}/bin/mysql -uroot -S ${MYSQL_HOME}/var/mysql.sock" $CMD_MYSQL -e "use mysql; delete from mysql.user where user='';" $CMD_MYSQL -e "use mysql; update user set password=password('${db_password}') where user='root'" $CMD_MYSQL -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '${db_password}'"; $CMD_MYSQL -e "flush privileges;"; echo "安装mysql数据库完成" #标记mysql数据库为已安装 export MYSQLDB_HAS_INSTALL=y fi ``` 由示例可见,一般执行脚本,都建议先定位到部署目录,然后基于部署目录设置相应的操作目录,额外的参数可通过xml流程配置中输入。其它的就是普通脚本编写了。脚本编写完成后,可统一放到scripts目录下,并按模块分目录,便于查找即可。 注意: > * windows下bat脚本,使用`%~dp0`定位当前bat的目录。 > * linux下shell脚本,使用` $(pwd)`定位运行部署工具(deploy-tool.jar)的sh文件所在位置(即install目录)。因此获取部署目录,使用`$(dirname $(pwd))`即可。 > * linux下若使用sh文件A调用另外一个sh文件B,而sh文件B是使用`ps|grep|awk`获取进程号(以便进行kill操作),会有子Shell的(临时)进程的问题,导致获取的进程号不正确。需要对文件A与文件B进行子进程过滤。如可使用``PID=`ps aux|grep -v grep|grep -v A|grep -v B|awk '{print $2}'` ``。其中A及B是文件名。