自动化部署脚本文件目录:

运行主程序:./install.sh

#!/bin/bash

SCRIPTPATH=$(cd "$(dirname "$0")"; pwd)#

这个命令写在脚本文件里才有作用,他返回这个脚本文件放置的目录,并可以根据这个目录来定位所要运行程序的相对位置(绝对位置除外)。

Install_log=$SCRIPTPATH/install_log.txt

echo "***start install***" > $Install_log
echo " workspace is $SCRIPTPATH" | tee -a "$Install_log"#写入日志文件日志

show_license() {
    clear
    confirm='Do you agree with this license? [y/n]: '
    more license.txt

lic_agreed=''

while read -p 'Do you agree with this license? [y/n]: ' lic_agreed
        do
                case "$lic_agreed" in
                        y | Y ) break;;
                        n | N ) echo 'License refused - exiting.' ;exit 1;;
                        * )     ;;
                esac
        done
}

install_expect(){
    # start install expect
    rpm -ivh --force expect/tcl-8.5.13-8.el7.x86_64.rpm
    if [[ 0 != $? ]] ; then
        echo "tcl install Failed !!!!!!"   | tee -a "$Install_log"
        exit 1
    else
        echo "tcl install Success !!!!!!"   | tee -a "$Install_log"
    fi
        
    rpm -ivh --force expect/expect-5.45-14.el7_1.x86_64.rpm
    if [[ 0 != $? ]] ; then
        echo "expect install Failed !!!!!!"   | tee -a "$Install_log"
        exit 1
    else
        echo "expect install Success !!!!!!"   | tee -a "$Install_log"
    fi
    
    # expect install finish
}

install_unzip(){
    # start unzip
    rpm -ivh --force unzip/unzip-6.0-19.el7.x86_64.rpm
    if [[ 0 != $? ]] ; then#$? 是上一个程序执行是否成功的标志,如果执行成功则$? 为0,否则 不为0

echo "unzip install Failed !!!!!!"   | tee -a "$Install_log"
        exit 1
    else
        echo "unzip install Success !!!!!!"   | tee -a "$Install_log"
    fi
    #unzip install finish
}

install_killall(){
    # start killall
    rpm -ivh --force killall/psmisc-22.20-15.el7.x86_64.rpm
    if [[ 0 != $? ]] ; then
        echo "killall psmisc install Failed !!!!!!"   | tee -a "$Install_log"
    else
        echo "killall psmisc install Success !!!!!!"   | tee -a "$Install_log"
    fi

#killall install finish
}

install_snmp(){
    snmpstatus=0
    rpm -ivh --force snmplib/net-snmp-libs-5.7.2-33.el7_5.2.x86_64.rpm
    let snmpstatus+=$?
    sleep 2
    rpm -ivh --force snmplib/net-snmp-utils-5.7.2-33.el7_5.2.x86_64.rpm
    let snmpstatus+=$?
    if [[ 0 != $snmpstatus ]] ; then
        echo "snmp  install Failed !!!!!!"   | tee -a "$Install_log"
    else
        echo "snmp  install Success !!!!!!"   | tee -a "$Install_log"
    fi
}

install_java(){
    #start to install java
    rpm -ivh --force java/jdk-8u144-linux-x64.rpm
    if [[ 0 != $? ]] ; then
        echo "java  install Failed !!!!!!"   | tee -a "$Install_log"
        exit 1
    else
        echo "java  install Success !!!!!!"   | tee -a "$Install_log"
    fi
    export JAVA_HOME=/usr/java/jdk1.8.0_144
    export JRE_HOME=$JAVA_HOME/jre
    export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
    export CLASSPATH=:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/dt.jar
    #java install finish
}

install_activemq(){
    #start to install activemq
    tar zxvf activemq/apache-activemq-5.13.0.tar.gz | tee -a "$Install_log"
    $SCRIPTPATH/apache-activemq-5.13.0/bin/linux-x86-64/activemq start &
    sleep 5
    echo "activemq install finish" | tee -a "$Install_log"
    #activemq install finish
}

install_redis(){
    #start to install redis
    tar zxvf redis/redis-3.2.9.tar.gz
    $SCRIPTPATH/redis-3.2.9/src/redis-server $SCRIPTPATH/redis-3.2.9/redis.conf &
    sleep 5
    echo "redis install finish" | tee -a "$Install_log"
    #redis install finish
}

install_systemdlib(){
    libstatus=0
    rpm -ivh --force libsystemd/lz4-1.7.5-2.el7.x86_64.rpm
    let libstatus+=$?
    sleep 2
    rpm -ivh --force libsystemd/systemd-libs-219-57.el7.x86_64.rpm
    let libstatus+=$?
    if [[ 0 != $libstatus ]] ; then
        echo "systemdlib  install Failed !!!!!!"   | tee -a "$Install_log"
        exit 1
    else
        echo "systemdlib  install Success !!!!!!"   | tee -a "$Install_log"
    fi
}

#下面这个函数,由于最小安装模式下缺少依赖包,所以将安装成功的文件进行an并集

install_postgres(){
    #start to install postgres
    cd postgres
    status=0
    rpm -ivh --force pgdg-centos96-9.6-3.noarch.rpm
    let status+=$?# $?取上一个安装结果,安装成功为0,安装失败为1

sleep 2
    rpm -ivh --force postgresql96-libs-9.6.5-1PGDG.rhel7.x86_64.rpm
    let status+=$?
    sleep 2
    rpm -ivh --force postgresql96-9.6.5-1PGDG.rhel7.x86_64.rpm
    let status+=$?
    sleep 2
    rpm -ivh --force libxslt-1.1.28-5.el7.x86_64.rpm
    let status+=$?
    sleep 2
    rpm -ivh --force postgresql96-contrib-9.6.5-1PGDG.rhel7.x86_64.rpm
    let status+=$?
    sleep 2
    rpm -ivh --force postgresql96-devel-9.6.5-1PGDG.rhel7.x86_64.rpm
    let status+=$?
    sleep 2
    rpm -ivh --force postgresql96-server-9.6.5-1PGDG.rhel7.x86_64.rpm
    let status+=$?
    sleep 2
    if [[ 0 != $status ]] ; then
        echo "postgres  install Failed !!!!!!"   | tee -a "$Install_log"
        exit 1
    else
        echo "postgres  install Success !!!!!!"   | tee -a "$Install_log"
    fi
    sleep 2
    cd $SCRIPTPATH
    #postgres install finish
}

init_postgresql(){n
    #init postgresql
    adduser uxsino
    /usr/pgsql-9.6/bin/postgresql96-setup initdb
    service postgresql-9.6 start
    $SCRIPTPATH/init-data.sh | tee -a "$Install_log"
    sleep 10
    mv -f $SCRIPTPATH/postgresql.conf /var/lib/pgsql/9.6/data/
    mv -f $SCRIPTPATH/pg_hba.conf /var/lib/pgsql/9.6/data/
    sleep 5
    service postgresql-9.6 restart
    sleep 10
    echo "postgresql init finish" | tee -a "$Install_log"
    #postgresql init finish
}

stop_firewalld(){
    #stop & disable firewalld
    
    systemctl stop firewalld.service | tee -a "$Install_log"
    sleep 10
    systemctl disable firewalld.service | tee -a "$Install_log"
    
    echo "stop & disable firewalld finish" | tee -a "$Install_log"
    #stop & disable firewalld finish
}

auto_run_config(){
    echo "export JAVA_HOME=/usr/java/jdk1.8.0_144" > $SCRIPTPATH/autostart.sh
    echo "export JRE_HOME=$JAVA_HOME/jre" >> $SCRIPTPATH/autostart.sh
    echo "export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin" >> $SCRIPTPATH/autostart.sh
    echo "export CLASSPATH=:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/dt.jar" >> $SCRIPTPATH/autostart.sh
    echo "service postgresql-9.6 restart" >> $SCRIPTPATH/autostart.sh
    echo "sleep 30" >> $SCRIPTPATH/autostart.sh
    echo "$SCRIPTPATH/redis-3.2.9/src/redis-server $SCRIPTPATH/redis-3.2.9/redis.conf &" >> $SCRIPTPATH/autostart.sh
    echo "sleep 10" >> $SCRIPTPATH/autostart.sh
    echo "$SCRIPTPATH/apache-activemq-5.13.0/bin/linux-x86-64/activemq start &" >> $SCRIPTPATH/autostart.sh
    echo "sleep 10" >> $SCRIPTPATH/autostart.sh
    echo "systemctl stop firewalld.service" >> $SCRIPTPATH/autostart.sh
    echo "sleep 10" >> $SCRIPTPATH/autostart.sh
    echo "$SCRIPTPATH/simo/scripts/runlib" >> $SCRIPTPATH/autostart.sh
    chmod 777 $SCRIPTPATH/autostart.sh
    confirm='Do you want set SIMO auto run? [y/n]: '
    auto_agreed=''
    
        while read -p 'Do you want set SIMO auto run? [y/n]: ' auto_agreed
        do
                case "$auto_agreed" in
                        y | Y )
                        #set simo auto run
                        echo "$SCRIPTPATH/autostart.sh" >> /etc/rc.d/rc.local  #linux系统自启动文件需要配置的文件路径
                        chmod +x /etc/rc.d/rc.local
                        break;;
                        n | N ) echo 'Do not set SIMO auto run' ;break;;
                        * )     ;;
                esac
        done
}

#unzip simo and config simo
unzip_simo(){
    unzip $SCRIPTPATH/simo-source/simo.zip
    cp $SCRIPTPATH/application.properties $SCRIPTPATH/simo/scripts/
    #enable/disable servicecenter
    echo "$SCRIPTPATH/simo/scripts/runmodule simo-servicecenter 512m &" > $SCRIPTPATH/runlib
    echo "sleep 5" >> $SCRIPTPATH/runlib
    #enable/disable collector
    echo "$SCRIPTPATH/simo/scripts/runmodule simo-collector 1024 &" >> $SCRIPTPATH/runlib
    echo "sleep 5" >> $SCRIPTPATH/runlib
    #enable/disable business
    echo "$SCRIPTPATH/simo/scripts/runmodule simo-business 512m  &" >> $SCRIPTPATH/runlib
    echo "sleep 5" >> $SCRIPTPATH/runlib
    #enable/disable itsm
    echo "$SCRIPTPATH/simo/scripts/runmodule simo-itsm 1024m &" >> $SCRIPTPATH/runlib
    echo "sleep 5" >> $SCRIPTPATH/runlib
    #enable/disable cmdb
    echo "$SCRIPTPATH/simo/scripts/runmodule simo-cmdb 512m &" >> $SCRIPTPATH/runlib
    echo "sleep 5" >> $SCRIPTPATH/runlib
    #enable/disable workflow
    echo "$SCRIPTPATH/simo/scripts/runmodule simo-workflow 512m &" >> $SCRIPTPATH/runlib
    echo "sleep 10" >> $SCRIPTPATH/runlib
    #enable/disable mc
    echo "$SCRIPTPATH/simo/scripts/runmodule simo-mc 2048m &" >> $SCRIPTPATH/runlib
    mv -f $SCRIPTPATH/runlib $SCRIPTPATH/simo/scripts/
}

run_simo(){
    chmod 777 $SCRIPTPATH/simo/scripts/runlib
    $SCRIPTPATH/simo/scripts/runlib
}

show_license
    install_expect
    install_unzip
    install_killall
    install_snmp
    install_java
    install_activemq
    install_redis
    install_systemdlib
    install_postgres
    init_postgresql
    stop_firewalld
    auto_run_config
    unzip_simo
    run_simo
    
    
exit 0

init-data.sh脚本如下:

#!/usr/bin/expect

set timeout 900
set user postgres
spawn su $user
expect "bash-4.2*"
send "psql\r"
expect "postgres=#"
send "alter user postgres with password 'postgres';\r"
expect "postgres=#"
send "create user uxsino with password 'Uxs!nO10';\r"
expect "postgres=#"
send "create database simo_dev owner uxsino;\r"
expect "postgres=#"
send "GRANT ALL PRIVILEGES ON DATABASE simo_dev to uxsino;\r"
expect "postgres=#"
send "\\q\r"
expect "bash-4.2*"
send "exit\r"
expect eof

自动化部署脚本--linux执行sh脚本的更多相关文章

  1. linux执行sh脚本文件命令

    linux执行sh脚本文件命令 很多时候需要多个命令来完成一项工作,而这个工作又常常是重复的,这个时候我们自然会想到将这些命令写成sh脚本,下次执行下这个脚本一切就都搞定了,下面就是发布代码的一个脚本 ...

  2. 在Linux中执行.sh脚本,异常

    在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory. 分析:这是不同系统编码格式引起的:在windows系统中 ...

  3. 在Linux中执行.sh脚本,异常/bin/sh^M

    在Linux中执行.sh脚本,异常/bin/sh^M 在linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory. 分 ...

  4. Linux定时执行.sh脚本

    因为测试ffmpeg推流用flv方式的话没有做自动断流,所以要先用.sh脚本来执行关流,降低CPU和其他资源占用 首先编写.sh文件 #! /bin/bash echo "kill ffmp ...

  5. 执行sh脚本文件下载Github上的代码(雷霄骅的ffmpeg示例代码)

       今天想重新学习下ffmpeg,于是又来到了雷晓骅的博客,先下载了他的所有代码,这里记录一下在Windows上使用sh脚本下载GitHub上代码的过程. CygWin(最后并没有用到)    可以 ...

  6. windows调起git bash执行sh脚本定时统计git仓库代码量

    本来挺简单的一个东西硬是弄了两天 心力交瘁 找了网上不少资料 整理一下发给大家 首先是统计每个人的代码量的git命令 在网上找的 我这里做了以下修改 git log --format='%aN'|so ...

  7. Linux执行shell脚本方式及区别&命令后台运行

    Linux执行shell脚本方式及区别&命令后台运行 http://blog.csdn.net/heqiyu34/article/details/19089951/

  8. Linux执行.sh文件,提示No such file or directory的问题的解决方法

    亲测有效:http://www.jb51.net/LINUXjishu/56395.html Linux执行.sh文件,提示No such file or directory的问题的解决方法 在win ...

  9. linux执行sh报错:$’\r’: 未找到命令的解决

    背景 执行.sh脚本时出现$'\r': 未找到命令, 原因 是因为命令直接从windows 复制过来导致的 解决 yum install dos2unix dos2unix **.sh 进行转换 再次 ...

随机推荐

  1. TCP socket 编程

    TCP socket 编程 讲一下 socket 编程 步骤 使用 socket 模块 建立 TCP socket 客户端和服务端 客户端和服务端之间的通信 图解 编程 举个例子 tcp_server ...

  2. Intellij idea启动项目提示"ClassNotFoundException"

    引用至Intellij IDEA 启动项目ClassNotFoundException 使用Intellij IDEA的过程中,新创建的项目启动时报 严重: Error configuring app ...

  3. hive报错java.sql.SQLException: null, message from server: "Host '192.168.126.100' is not allowed to connect to this MySQL server"

  4. 帝国cms 通过文章的id获取信息

    获取栏目id为13下id为46的数据 [e:loop={"select * from phome_ecms_news where classid = 13 and id = 46" ...

  5. hadoop的价值在哪里

    新霸哥注意到了在移动互联网时代,很多的传统的系统架构已经不能满足现有的业务需要了,在大数据时代,我们需要新的架构才能满足海量数据处理能力. 在实际的应用中数据增长非常的迅速,数据类型也变的丰富了,业务 ...

  6. 运维学习篇之jenkins的安装(CentOS7)

    一. 介绍   Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能二. 作用  1.持续的软件版本 ...

  7. 码流回调过快导致下方处理不及时socket阻塞问题

    在一个情形中遇到下面一个情况 简述下该图片,对sdk进行二次开发,通过第三方sdk接口获取码流信息.具体实现方式是通过回调函数CallBack_SDK来不停的回调第三方服务的视频流.起初实现逻辑如下: ...

  8. 命令方式 搭建 (简易)Maven项目

    原料:1.配好的Maven环境变量    2.c m d命令 win  + r  输入 cmd 切换到此项目所要存在的位置 使用命令创建文件夹 切换 到 maven_demo中  输入 cd mave ...

  9. centos7安装python3x,使用virtualenv创建python3的隔离环境

    centos7默认python程序是2x,如果要使用3x可以使用EPEL仓库安装.同时为了使用隔离的python环境可以安装virtualenv. 1.启用EPEL sudo yum install ...

  10. 【转】推荐几本学习MySQL的好书-MySQL 深入的书籍

    MySQL的使用 1 MySQL技术内幕InnoDB存储引擎 2 MySQL的官方手册 3 MySQL排错指南 4 高性能MySQL 5 数据库索引设计与优化 6 Effective MySQL系列 ...