zoukankan      html  css  js  c++  java
  • 【树莓派】【原】远程连接树莓派设备,以及进行远程应用更新与升级

    在实际工作中,我们把树莓派作为一个agent放在用户那边,在里面启动一些服务,进行用户业务数据dicom文件的存储,并转发到阿里云oss上面,起到一个gateway的作用。

    但是,放出去的盒子,就如同魔术师手中的飞镖,发出去,怎么还能继续掌控,这很重要。

    在实际应用场景中,对于这种agent,我们还需要继续维护,升级,并定期进行一些业务数据的更新。

    那么如何进行远程操控以及管理呢?

    我们目前采用下面的方式处理,虽然我认为其实有更好的方式,但目前暂先就如此,毕竟我们都知道,稳定大于一切。

    1.在每个agent 树莓派盒子上面,通过 sshkey-gen生成自己的公钥私钥;

    2.将每个agent的私钥存储在ssh在管控/调度机器(相当于跳板机)的~/.ssh/authorized_keys中,并保存;

    3.在自己的应用程序中,通过MQ下发消息,在树莓派盒子上面,用 ssh -o "StrictHostKeyChecking no" -CNfR 10000:127.0.0.1:22 boxagent@smith.lifeccp.com 驱动盒子发起ssh请求;或者

    4.在跳板机上面,使用 ssh -p 10140 lifeccp@localhost 命令来连接树莓派盒子;

    5.由于ssh连接存在时效性,所以,退出时候记得exit一下,否则可能下次连接时候存在问题导致连接不上。

    6.如果连接不上,可以通过如下命令kill旧的进程,然后重新发起连接请求; 

    kill -9 `ps -ef |grep ssh |grep StrictHostKeyChecking | awk '{print $2}'`
    
    或者 kill -9 `pgrep -f StrictHostKeyChecking`

    我这边成功的结果,如下图:

     另外,应用更新其实很简单了,在agent盒子那边写个脚本,执行一下就行了。update.sh脚本内容见下面:

    #!/bin/sh
    export JAVA_HOME=/usr/lib/jdk1.8.0_45
    export CALSSPATH=$JAVA_HOME/lib/*.*   
    export PATH=$PATH:$JAVA_HOME/bin
    
    #config
    APP_NAME=osprey
    USER_HOME=/home/lifeccp/webapp
    RELEASE_SRC="boxagent@smith.lifeccp.com:/home/boxagent/boxrelease/osprey/*.zip"
    
    #function
    say() {
        echo -e "[Osprey Deploy] $0: $1"
    }
    
    fetch_artifacts() {
        DEST="$USER_HOME/incoming/${APP_NAME}/"
        [ -d ${DEST} ] || mkdir -p ${DEST}
        say "Fetching artifacts from $ARTIFACTS_SRC to ${DEST}"
        scp ${RELEASE_SRC} ${DEST} 
        
        say "Unzip the new war"
        cd ${DEST} && unzip -qo *.zip    
        
        if [ "$?" = "0" ]; then
            say "33[32m -=Fetch artifacts finished=- 33[0m"
        else
            say "33[31m -=Fetch artifacts failed=- 33[0m"
            exit 1
        fi
    
    }
    
    stop_app() {
        say "Stopping [${APP_NAME}]"
        pkill -f ${APP_NAME}
    
        osprey_pid=$(pgrep -f ${APP_NAME})
        if [ "${osprey_pid}" = "" ]; then
            say "33[32m -=Stop ${APP_NAME} finished=- 33[0m"
        else
            say "33[32m -=Stop ${APP_NAME} failed=- 33[0m"
            kill -9 "${osprey_pid}"
            say "33[32m -=Kill -9 ${APP_NAME}=- 33[0m"
        fi
    }
    
    backup_app() {
        DEST="$USER_HOME/archive/${APP_NAME}$(date '+%Y%m%d%H%M')/"
        say "make backup dir ${DEST}"
        mkdir -p "${DEST}"
        
        say "Copying backup app and config files."
        cp -r ${USER_HOME}/${APP_NAME}/* ${DEST}    
        say "33[32m -=Backup ${APP_NAME} finished=- 33[0m"
        
        
    }
    
    deploy_app() {
        DEST="$USER_HOME/incoming/${APP_NAME}/"
        say "Deploy ${APP_NAME}"
    
        say "Remove old app"
        rm -rf $USER_HOME/$APP_NAME/osprey*.release.jar
        rm -rf $USER_HOME/$APP_NAME/osprey*.release.jar.original
    
        say "Copying new app"
        # cp $USER_HOME/incoming/$APP_NAME/*.zip $USER_HOME/$APP_NAME/
        cp ${DEST}/osprey*.release.jar $USER_HOME/$APP_NAME/osprey.release.jar
        cp ${DEST}/osprey*.release.jar.original $USER_HOME/$APP_NAME/
        
    
        if [ "$?" = "0" ]; then
            say "33[32m -=Deploy ${APP_NAME} finished=- 33[0m"
        else
            say "33[31m -=Deploy ${APP_NAME} failed=- 33[0m"
            exit 1
        fi
    }
    
    
    clear_app() {
        say "clear $USER_HOME/incoming/${APP_NAME}/"
        rm -rf $USER_HOME/incoming/${APP_NAME}/*
    }
    
    
    start_app() {
        say "Start [${APP_NAME}]"
        sudo reboot
        if [ "$?" = "0" ]; then
            say "33[32m -=Start reboot finished=- 33[0m"
        else
            say "33[31m -=Start reboot failed=- 33[0m"
            exit 1
        fi
    }
    
    publish() {
        fetch_artifacts
        stop_app
        backup_app
        deploy_app  
        clear_app
        start_app
    }
    
    #### do it ###
    publish

    简单说明一下上面的脚本:

    1.获取新的安装包;

    2.停止当前应用;

    3.备份当前应用;

    4.部署当前应用;

    5.清理安装包文件;

    6.启动服务应用;

    7.发布部署; 

    树莓派系列文章为原创文章,转载请注明源自 http://www.cnblogs.com/haochuang/,感谢配合。

  • 相关阅读:
    KISSY 1.3.0 发布,淘宝 Web UI 库
    mongodb的监控与性能优化
    Aspose.Tasks 4.9.0 发布,Project 文件读写
    Fix8 0.6.6 发布,C++ 实现的 FIX 框架
    VIM Pal 1.1.0 发布,VIM 文件树列表
    QT 5.0 正式版发布,支持 C++11
    TWiki 5.1.3 发布,企业 Wiki 系统
    Apache Lucene 3.6.2 发布
    Apache Sqoop 1.99.1 发布
    JAXX 2.5.9 发布,XML用户界面框架
  • 原文地址:https://www.cnblogs.com/haochuang/p/6553191.html
Copyright © 2011-2022 走看看