加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

使用C和Shell达成远程Tomcat的重启备份脚本

发布时间:2021-11-21 20:34:30 所属栏目:教程 来源:互联网
导读:使用C和Shell实现远程Tomcat的重启备份脚本 下面是客户端程序 #include stdio.h #include stdlib.h #include errno.h #include string.h #include sys/types.h #include netinet/in.h #include sys/socket.h #include sys/wait.h #define SERVPORT 6666 #def

使用C和Shell实现远程Tomcat的重启备份脚本
 
下面是客户端程序
 
#include <stdio.h>
 
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
 
 
#define SERVPORT 6666
#define MAXDATASIZE 1024
#define SERVER_IP "10.10.10.158"
 
 
int main(int argc, char* argv[]) {
    int sockfd, recvbytes;
    char buf[MAXDATASIZE];
    struct hostent *host;
    char buffer[MAXDATASIZE];
    struct sockaddr_in serv_addr;
    char name[100];
 
 
  printf("请输入要操作的tomcat路径n");
  scanf("%s",&name);
 
 
  while(1){
      bzero(buffer, MAXDATASIZE);
      if (( sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
        perror("socket error!");
        exit(1);
      }
      bzero(&serv_addr,sizeof(serv_addr));
      serv_addr.sin_family = AF_INET;
      serv_addr.sin_port = htons(SERVPORT);
      serv_addr.sin_addr.s_addr= inet_addr(SERVER_IP);
 
 
    if (connect(sockfd, (struct sockaddr *)&serv_addr,sizeof(struct sockaddr)) == -1) {
        perror("connect error!");
        exit(1);
    }
 
 
    printf("请输入要执行的命令:n");
    scanf("%s",&buf);
    if(strcmp(buf,"close")==0){
        close(sockfd);
        return 0;
    }
    strcat(buffer,name);
    strcat(buffer," ");
    strcat(buffer,buf);
 
 
    write(sockfd,buffer, sizeof(buffer));
    if ((recvbytes = recv(sockfd, buf, MAXDATASIZE,0)) == -1) {
        perror("recv error!");
        exit(1);
    }
    buf[recvbytes] = '';
    printf("客户端返回的消息:n %s",buf);
  }
 
 
    close(sockfd);
    return 0;
 
}
 
 
 
 
下面是服务端程序
 
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
 
#define SERVPORT 6666
#define BACKLOG 10
#define MAXSIZE 1024
 
int main() {
    int sockfd,client_fd;
    struct sockaddr_in my_addr;
    struct sockaddr_in remote_addr;
    FILE * fp;
    char buffer[80];
 
    //创建套接字
    if ((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1) {
        perror("socket create failed!");
        exit(1);
    }
 
    //绑定端口地址
    my_addr.sin_family      = AF_INET;
    my_addr.sin_port        = htons(SERVPORT);
    my_addr.sin_addr.s_addr = INADDR_ANY;
    bzero(&(my_addr.sin_zero),8);
    if (bind(sockfd, (struct sockaddr*)&my_addr, sizeof(struct sockaddr)) == -1) {
        perror("bind error!");
        exit(1);
    }
 
    if (listen(sockfd, BACKLOG) == -1) {
        perror("listen error");
        exit(1);
    }
 
    while (1) {
        int sin_size = sizeof(struct sockaddr_in);   
        char shell[100] =" ";
        if ((client_fd = accept(sockfd, (struct sockaddr*)&remote_addr,&sin_size)) == -1) {
            perror("accept error!");
            continue;
        }
        printf("Received a connection from %sn", (char*)inet_ntoa(remote_addr.sin_addr));
        if (!fork()) {
            int rval;
            char buf[MAXSIZE];
            if ((rval = read(client_fd, buf, MAXSIZE)) < 0) {
                perror("reading stream error!");
                continue;
            }
            printf("客户端发送的消息%sn",buf);
            strcat(shell,"/home/shell/tomcat_online.sh");   
            strcat(shell," ");
            strcat(shell,buf);
            fp=popen(shell,"r");
            while(fgets(buf,sizeof(buf),fp) != NULL )
            {
                strcat(buf,"n");
                if (send(client_fd,buf,strlen(buf),0) == -1) perror("send error!");
            }
            pclose(fp);
 
 
            close(client_fd);
            exit(0);
        }
        close(client_fd);
    }
    return 0;
}
 
 
 
 
 
调用shell 服务器端
 
#!/bin/sh
 
 
Project_name=$1
Command=$2
my_Back="webapps_backup"
 
 
case "$Command" in
 
      start)
            export Java_HOME=/usr/local/java/jdk1.6.0_23
   
            cd $Project_name
 
 
            rm -rf work/*
 
 
            $Project_name/bin/startup.sh >/dev/null
 
 
            sleep 3
           
            tompid=`ps -ef|grep $Project_name|grep -v "grep"|grep -v "$0" |awk '{print $2}'`             
           
            if ( [ -n "$tompid" ] );then
 
 
                echo -e "33[32m$Project_name启动成功33[0m"
 
 
            else
 
 
                echo -e "33[31m$Project_name启动失败,请重新执行一次命令33[0m"
 
 
          fi
               
            ;;
 
 
      stop)
            pidlist=`ps -ef|grep $Project_name|grep -v "grep"|grep -v "$0" |awk '{print $2}'`
 
  #echo "tomcat Id list :$pidlist"
 
 
            kill -15 $pidlist
 
            #echo "KILL $pidlist"
   
            sleep 10
 
            tompid=`ps -ef|grep $Project_name|grep -v "grep"|grep -v "$0" |awk '{print $2}'`             
   
            if ( [ -n "$tompid" ] && [ $tompid ==  $pidlist ] );then
 
 
                echo -e "33[31m$Project_name停止失败,请重新执行一次命令33[0m"
 
 
            else
                       
                  #/usr/bin/tail -1000  $Project_name/logs/catalina.out
 
                  echo -e "33[32m$Project_name停止成功33[0m"
 
 
            fi
  ;;
        status)
           
            tompid=`ps -ef|grep $Project_name|grep -v "grep"|grep -v "$0" |awk '{print $2}'`
             
            if ( [ -n "$tompid" ] );then
 
 
                  echo -e "33[32m$Project_name运行中......33[0m"
            else
 
 
                  echo -e "33[32m$Project_name停止中.....33[0m"
 
 
            fi
 
 
            ;;
        restart)
             
                export JAVA_HOME=/usr/local/java/jdk1.6.0_23
 
      pidlist=`ps -ef|grep $Project_name|grep -v "grep"|grep -v "$0"|awk '{print $2}'`
 
 
              # echo "tomcat Id list :$pidlist"
 
 
                kill -15 $pidlist
 
 
      #echo "KILL $pidlist:"
 
 
                #echo "stop success"
 
 
      #echo "start tomcat"
               
                cd $Project_name
 
 
      rm -rf work/*
 
 
              cd bin
       
                sleep 10
   
                ./startup.sh
               
                sleep 3
 
 
                /usr/bin/tail -100  $Project_name/logs/catalina.out
         
                echo -e "33[32m$Project_name重启成功33[0m"
 
                ;;
 
 
          backup)
 
 
                cd $Project_name
           
                before_num=`/bin/ls webapps_backup/ |wc -l`
 
                `/bin/find  -type d  -name "webapps_[0-9]*" -mtime +10 | xargs rm -fr`
               
                #echo $my_Back
 
 
                if [ ! -d "$my_Back" ]; then
 
 
                   `/bin/mkdir -p $my_Back`
 
 
                  fi
 
                  /bin/cp -frp webapps  $my_Back/webapps_$(/bin/date -d "today" +"%Y%m%d_%H%M")
 
 
           
                  after_num=`/bin/ls webapps_backup/ |wc -l`
 
 
                  if [ $after_num -eq $(($before_num+1)) ];then
 
 
                      echo -e "33[32m$Project_name备份成功33[0m"
         
                  else
             
                        echo -e "33[31m$Project_name备份失败,请重新备份33[0m"   
       
                  fi
 
 
                  ;;
 
 
          rollback)
           
                  file_name=`/bin/ls -ltc $Project_name/$my_Back|sed -n 2p|awk '{print $8}'`
           
                  #echo "$Project_name/$my_Back/$file_name"
 
                  #echo $file_name
 
 
                  /bin/cp -frp $Project_name/$my_Back/$file_name  $Project_name/$my_Back/webapps
 
                  /bin/cp -frp $Project_name/$my_Back/webapps $Project_name
         
                  rm -fr $Project_name/$my_Back/webapps
             
                  cd $Project_name
             
                  if ([ "`find  ./ -maxdepth 1  -type d -cmin -1|sed -n 1p`"  == './webapps' ]);then
           
                        echo -e "33[32m$Project_name回滚成功33[0m"
           
                  else
                   
                        echo -e "33[31m$Project_name回滚失败,请重新执行一次33[0m"       
         
                  fi
 
 
                  ;;
              *)
                    echo "Usage: $0 {start|stop|restart|status|backup|rollback}"
 
 
                    exit 1
 
 
esac
           
  exit 0
 
 

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读