expect使用

  1. 自动ssh链接别的服务器

expect -c "
  # ssh链接命令,需要链接192.168.0.171这台服务器
  spawn bash -c \"ssh root@192.168.0.171\"
  expect {
    # 如果第一次链接的时候可能需要判断yes或者no,发送命令为yes并进行下一步
    \"yes/no\" {send \"yes\r\"; exp_continue;}
    # 输入密码
    \"*assword\" {set timeout 300; send \"aaa\r\";}
  }
  # 链接完成后,退出ssh
  expect \"]#\" {set timeout 300; send \"exit\r\"}

expect eof"
  1. sh脚本如何通过控制台传参数

sh /opt/jnpf/start-platform-ssh.sh -p 参数a -c 参数b -j 参数c
  1. 【start-platform-ssh.sh】文件内容

#!/bin/bash
# 定义参数别名
PROJECTNAME=
CATALOGUE=
JAR=

# 定义参数赋值
while getopts "p:c:j:" opt  
do 
    case $opt in    
        p) 
        PROJECTNAME=$OPTARG
        ;;
        c) 
        CATALOGUE=$OPTARG
        ;;
        j) 
        JAR=$OPTARG
        ;;
        ?) 
        echo "未知参数" 
        exit 1
        ;; 
    esac 
done

# expect命令执行
expect -c "

  # scp命令执行
  spawn bash -c \"scp $JAR root@192.168.0.171:/opt/jnpf/$CATALOGUE/source/\"
  expect {
    \"yes/no\" {send \"yes\r\"; exp_continue;}
    \"*assword\" {set timeout 300; send \"aaa\r\";}
  }

  # ssh命令执行
  spawn bash -c \"ssh root@192.168.0.171\"
  expect {
    \"yes/no\" {send \"yes\r\"; exp_continue;}
    \"*assword\" {set timeout 300; send \"aaaa\r\";}
  }
  
  # 进入/opt/jnpf目录下
  expect \"]#\" {set timeout 300; send \"cd /opt/jnpf\r\"}
  # kill 项目进程
  expect \"]#\" {set timeout 300; send \"./stop.sh -t $JAR\r\"}
  # 启动项目进程
  expect \"]#\" {set timeout 300; send \"./start-platform.sh -s $PROJECTNAME -t $JAR -h /opt/jnpf/$CATALOGUE\r\"}
  # 退出ssh
  expect \"]#\" {set timeout 300; send \"exit\r\"}

# 结束expect
expect eof"
  1. 启动项目命令

 ./start.sh -s 项目名 -t 项目jar包名 -h jar包目录
  1. 【start.sh】文件内容

#!/bin/bash

SCREENNAME=
HOME=
TARGET=

DATE=$(date +%Y%m%d-%H:%M:%S)

while getopts "s:h:t:" opt  
do 
    case $opt in    
        s) 
        SCREENNAME=$OPTARG
        ;;
        h) 
        HOME=$OPTARG
        ;; 
        t)
        TARGET=$OPTARG
        ;;     
        ?) 
        echo "未知参数" 
        exit 1
        ;; 
    esac 
done

for pid in $(ps -ef|grep $TARGET |grep -v grep|grep -v PPID|awk '{ print $2}'); do
    if [ $pid -eq $$ ]; then
        echo $pid
    else 
        kill -9 $pid
    fi
done

screen -wipe

cd $HOME

cp source/$TARGET $TARGET

screen -dmS $SCREENNAME bash -c "java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC $TARGET"
  1. kill进程

./stop.sh -t 项目jar包名
  1. 【stop.sh】文件内容

#!/bin/bash


TARGET=

DATE=$(date +%Y%m%d-%H:%M:%S)

while getopts "t:" opt  
do 
    case $opt in    
        t)
        TARGET=$OPTARG
        ;;     
        ?) 
        echo "未知参数" 
        exit 1
        ;; 
    esac 
done

for pid in $(ps -ef|grep $TARGET |grep -v grep|grep -v PPID|awk '{ print $2}'); do
    if [ $pid -eq $$ ]; then
        echo $pid
    else 
        kill -9 $pid
    fi
done

screen -wipe

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值