CentOS6u8 java和tomcat多版本模板的ansible批量部署实现(四)

业务部署:


192.168.77.100操作:

su - deploy
mkdir -pv web_pro_env/{inventory,roles}
# 配置被操控的主机信息
cat >web_pro_env/inventory/proenv<<EOF
192.168.77.200
[Server]
192.168.77.200
EOF

# 创建web_pro角色,实现业务账号部署和项目部署
mkdir -pv web_pro_env/roles/web_pro/{files,templates,tasks}
cat >web_pro_env/roles/web_pro/templates/web_pro_clear.sh.j2<<EOFALL
#!/bin/bash
source ~/.bash_profile
if [ -f /var/spool/cron/web_pro ]
then
  rm -rf /var/spool/cron/web_pro
  for Pid in \$(ps -ef|grep '^web_pro '|grep -v grep|awk '{print \$2}');do kill -9 \${Pid};done
fi
if [ -d /web ]
then
  chattr -i -R /web
  rm -rf /web
fi
grep -q ^web_pro /etc/passwd
if [ \$? -eq 0 ]
then
  userdel -r web_pro
fi
sed -i '/^web_pro.*/d' /etc/security/limits.conf
sed -i '/^session required pam_limits.so$/d' /etc/pam.d/login
EOFALL

cat >web_pro_env/roles/web_pro/templates/web_pro_useradd.sh.j2<<EOFALL
#!/bin/bash
source ~/.bash_profile
useradd -u 8080 web_pro
echo web_pro|passwd --stdin web_pro
echo 'web_pro soft nproc 2047'>>/etc/security/limits.conf
echo 'web_pro hard nproc 16384'>>/etc/security/limits.conf
echo 'web_pro soft nofile 1024'>>/etc/security/limits.conf
echo 'web_pro hard nofile 65536'>>/etc/security/limits.conf
echo 'web_pro soft stack 10240'>>/etc/security/limits.conf
echo 'web_pro hard stack 32768'>>/etc/security/limits.conf
echo 'session required pam_limits.so'>>/etc/pam.d/login
EOFALL

cat >web_pro_env/roles/web_pro/templates/web_pro_checkTOMCAT.sh.j2<<EOFALL
#!/bin/bash
source ~/.bash_profile
mkdir -pv /web/{profile,project,logs,checkTOMCAT}
chown web_pro: -R /web
chmod 750 -R /web
cd /web/checkTOMCAT
cat>checktomcat.sh<<EOF
#!/bin/bash
source /etc/profile
# 工作目录
CPWD=\$(dirname \${0})
# 配置表单
CHKLIST=\${CPWD}/checktomcat.lst
# 超时对比文件
TIMESTANDARD=\${CPWD}/checktomcat.tsd
# 自动拉起行为日志
CHECKLOG=\${CPWD}/checktomcat_log.txt
# 脚本运行日志
RUNLOG=\${CPWD}/checktomcat_run_\$(date +%F).log
echo "\$(date +%F.%T) Check file \${CHKLIST}">>\${RUNLOG}
# 处理过程:
while read line
do
  if [ "\${line:0:1}" == "#" -o "\${line}" == "" ]
  then
    continue
    # 如果配置表单为注释行或者空行,则忽略
  fi
  # 标志性项目名:BIN目录:统计进程数项目名:启动命令:监控日志:日志超时时间
  # 标志性项目名 便于人工识别项目
  # 统计进程数项目名 唯一定义该项目的进程 不能有歧义
  VNAME=\$(echo \${line}|awk -F ':' '{print \$1}')
  VWORKDIR=\$(echo \${line}|awk -F ':' '{print \$2}')
  VPROC=\$(echo \${line}|awk -F ':' '{print \$3}')
  VSTART=\$(echo \${line}|awk -F ':' '{print \$4}')
  VLOG=\$(echo \${line}|awk -F ':' '{print \$5}')
  VTIME=\$(echo \${line}|awk -F ':' '{print \$6}')
  # 如果配置表单该行BIN目录不存在,则打日志并忽略该行处理
  if [ -d "\${VWORKDIR}" ]
  then
    cd "\${VWORKDIR}"
  else
    echo "\$(date +%F.%T) WARNNING \${VWORKDIR} is not exists, check \${VNAME} is skip...">>\$CHECKLOG
    continue
  fi
  # 当前该项目的进程数量
  PROCCOUNTS=\$(ps -ef|grep "\${VPROC}"|grep java|grep -v "grep"|wc -l)
  # 注意:\${VPROC}必须能够唯一标识该项目的进程
  # 如果当前该项目的进程数量为0,则拉起该项目
  if [ "\${PROCCOUNTS}" == "0" ]
  then
    echo \${VNAME} not running, restarted.>>\${CHECKLOG}
    echo "\$(date +%F.%T) \${VNAME} not running">>\${CHECKLOG}
    echo "\$(date +%F.%T) \${VSTART}">>\${CHECKLOG}
    \${VSTART} &
    continue
  fi
  # 日志超时检测
  if [ "\${VTIME}" != "0" ]
  then
    # 刷新对比文件的时间戳
    touch -t \$(date -d "-\${VTIME} second" +"%Y%m%d%H%M.%S") \${TIMESTANDARD}
    # 对比日志是否比对比文件时间戳新
    LOGFILECOUNTS=\$(find \${VLOG} -newer \${TIMESTANDARD}|wc -l)
    if [ "\${LOGFILECOUNTS}" == "0" ]
    then
      echo "\${VLOG} is not exists or is expired \${VTIME} second.">>\${CHECKLOG}
      echo "\$(date +"%F.%T") \${VNAME} logfile is expired \${VTIME} second">>\${CHECKLOG}
      echo "\$(date +"%F.%T") \${VSTART}">>\${CHECKLOG}
      touch \${VLOG}
      for i in \$(ps -ef|grep "\${VPROC}"|grep java|grep -v "grep"|awk '{print \$2}')
      do
        kill -9 \${i}
      done
      # 杀掉该项目的所有进程
      \${VSTART} &
      continue
    fi
  fi
done<\${CHKLIST}
cd \${CPWD}
EOF
chmod 700 checktomcat.sh
# 创建配置表单
echo '# TOMCAT_NAME:BIN_PATH:PROCESS_NAME:START_SCRIPT:CHECK_LOG:LOG_TIMEOUT:PORT_OFFSET'>checktomcat.lst
# 生效自动任务
>/var/spool/cron/web_pro
chown web_pro: /var/spool/cron/web_pro
chmod 0600 /var/spool/cron/web_pro
echo "# Check TOMCAT Process" >>/var/spool/cron/web_pro
echo "*/1 * * * *          /web/checkTOMCAT/checktomcat.sh> /dev/null 2>&1" >>/var/spool/cron/web_pro
echo "*/1 * * * * sleep 10;/web/checkTOMCAT/checktomcat.sh> /dev/null 2>&1" >>/var/spool/cron/web_pro
echo "*/1 * * * * sleep 20;/web/checkTOMCAT/checktomcat.sh> /dev/null 2>&1" >>/var/spool/cron/web_pro
echo "*/1 * * * * sleep 30;/web/checkTOMCAT/checktomcat.sh> /dev/null 2>&1" >>/var/spool/cron/web_pro
echo "*/1 * * * * sleep 40;/web/checkTOMCAT/checktomcat.sh> /dev/null 2>&1" >>/var/spool/cron/web_pro
echo "*/1 * * * * sleep 50;/web/checkTOMCAT/checktomcat.sh> /dev/null 2>&1" >>/var/spool/cron/web_pro
echo "0 3 * * * /usr/bin/find /web/checkTOMCAT/checktomcat_run_*.log -type f -mtime +30 -exec rm -rf {} \;" >>/var/spool/cron/web_pro
chown web_pro: -R /web
EOFALL
sed -i 's/\$/\\$/g' web_pro_env/roles/web_pro/templates/web_pro_checkTOMCAT.sh.j2

cat >web_pro_env/roles/web_pro/templates/web_pro_pro_deploy.sh.j2<<EOFALL
#!/bin/bash
source ~/.bash_profile
cd /web/checkTOMCAT
cat >pro_deploy.sh<<EOF
#!/bin/bash
source ~/.bash_profile
# JAVA环境目录
JAVA_ENV=/usr/local/java
# TOMCAT模板目录
TOMCAT_ENV=/usr/local/tomcat
# 实例目录
IPWD=/web
# 工作目录
CPWD=\$(dirname \${0})
# 配置表单
CHKLIST=\${CPWD}/checktomcat.lst
# 执行帮助
if [ "\$#" -ne 6 ]
then
    echo \$"Usage:   bash \$(basename \$0) -n PRO_NAME -j JAVA_VERSION -t TOMCAT_VERSION"
    echo \$"Example: bash \$(basename \$0) -n vincent_test -j java_1.6 -t tomcat6"
    echo \$"JAVA_VERSION can be java_1.6/java_1.7/java_1.8"
    echo \$"TOMCAT_VERSION can be tomcat6/tomcat7/tomcat8"
    exit 1
fi
while [ "\$#" -gt 0 ]
do
    case "\$1" in
            -n)
                shift
                typeset -l PRO_NAME="\${1}"
                shift
                ;;
            -j)
                shift
                typeset -l JAVA_VERSION="\${1}"
                shift
                ;;
            -t)
                shift
                typeset -l TOMCAT_VERSION="\${1}"
                shift
                ;;
    esac
done
# 端口偏移
PORT_OFFSET=\$(awk -F':' '{if(\$NF~/[0-9]+/) print \$NF}' \${CHKLIST}|wc -l)
# 实例名称
TOMCAT_NAME=\${TOMCAT_VERSION}_\$((8080+\$PORT_OFFSET))_\${PRO_NAME}
# 实例复制
cp -a \${TOMCAT_ENV}/\${TOMCAT_VERSION}/ \${IPWD}/\${TOMCAT_NAME}
# 配置文件修改
sed -i "s|#!/bin/sh|&\nsource \${JAVA_ENV}/\${JAVA_VERSION}_env|g" \${IPWD}/\${TOMCAT_NAME}/bin/catalina.sh
sed -i "s/tomcat.*\$/\${TOMCAT_NAME}/g" \${IPWD}/\${TOMCAT_NAME}/bin/cat.sh
sed -i "s/18080/\$((18080+\$PORT_OFFSET))/g" \${IPWD}/\${TOMCAT_NAME}/conf/server.xml
sed -i "s/8080/\$((8080+\$PORT_OFFSET))/g" \${IPWD}/\${TOMCAT_NAME}/conf/server.xml
sed -i "s/9443/\$((9443+\$PORT_OFFSET))/g"   \${IPWD}/\${TOMCAT_NAME}/conf/server.xml
sed -i "s/28080/\$((28080+\$PORT_OFFSET))/g" \${IPWD}/\${TOMCAT_NAME}/conf/server.xml
sed -i "s/tomcat[678]/\${TOMCAT_NAME}/g" \${IPWD}/\${TOMCAT_NAME}/conf/server.xml
# 配置表单添加
echo "\${PRO_NAME}:\${IPWD}/\${TOMCAT_NAME}/bin:\${TOMCAT_NAME}:./startup.sh:CHECK_LOG:0:\${PORT_OFFSET}">>\${CHKLIST}
# 添加日志日切任务
crontab -l>/tmp/web_pro_crontab.txt
echo "# \${TOMCAT_NAME} DAILY LOG ARCHIVE" >>/tmp/web_pro_crontab.txt
echo "0 3 * * * /bin/bash /web/\${TOMCAT_NAME}/bin/cat.sh">>/tmp/web_pro_crontab.txt
cat /tmp/web_pro_crontab.txt |crontab
rm -rf /tmp/web_pro_crontab.txt
# 生成测试页面:
mkdir -p /web/project/\${TOMCAT_NAME}/ROOT
echo "\$(hostname -i):\${TOMCAT_NAME}">>/web/project/\${TOMCAT_NAME}/ROOT/index.html
echo "curl http://\$(hostname -i):\$((8080+\$PORT_OFFSET))/index.html"
EOF
chmod +x pro_deploy.sh
chown web_pro: -R /web
chattr +i /web/tomcat*/bin
chattr +i /web/tomcat*/conf
chattr +i /web/tomcat*/lib
cd /web/checkTOMCAT/
chattr +i *.sh
EOFALL
sed -i 's/\$/\\$/g' web_pro_env/roles/web_pro/templates/web_pro_pro_deploy.sh.j2

cat >web_pro_env/roles/web_pro/tasks/main.yml<<EOF
- name: rsync web_pro_clear.sh
  template: src=roles/web_pro/templates/web_pro_clear.sh.j2 dest=/tmp/web_pro_clear.sh
- name: rsync web_pro_useradd.sh
  template: src=roles/web_pro/templates/web_pro_useradd.sh.j2 dest=/tmp/web_pro_useradd.sh
- name: rsync web_pro_checkTOMCAT.sh
  template: src=roles/web_pro/templates/web_pro_checkTOMCAT.sh.j2 dest=/tmp/web_pro_checkTOMCAT.sh
- name: rsync web_pro_pro_deploy.sh
  template: src=roles/web_pro/templates/web_pro_pro_deploy.sh.j2 dest=/tmp/web_pro_pro_deploy.sh
- name: clear web_pro
  command: "bash /tmp/web_pro_clear.sh"
- name: useradd web_pro
  command: "bash /tmp/web_pro_useradd.sh"
- name: web_pro add checkTOMCAT
  command: "bash /tmp/web_pro_checkTOMCAT.sh"
- name: web_pro add pro_deploy
  command: "bash /tmp/web_pro_pro_deploy.sh"
EOF

cat >web_pro_env/deploy.yml<<EOF
- hosts: "Server"
  gather_facts: true
  remote_user: root
  roles:
    - web_pro
EOF

cd web_pro_env
ansible-playbook -i inventory/proenv ./deploy.yml
cd

登陆192.168.77.200进行测试:

su - web_pro
cd /web/checkTOMCAT
bash pro_deploy.sh -n test1 -j java_1.6 -t tomcat6
bash pro_deploy.sh -n test2 -j java_1.7 -t tomcat7
bash pro_deploy.sh -n test3 -j java_1.8 -t tomcat8

[TOC]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值