zoukankan      html  css  js  c++  java
  • centos6环境远程执行shell脚本报错not a valid identifier的问题处理

    # 通过jenkins的apache用户rsync同步php代码到远程服务器报错如下:
    
    SSH: EXEC: STDOUT/STDERR from command [/bin/sh /usr/local/worksh/jenkins_rsync/rsync_cc-product-api_cn.sh all ] ...
    /usr/local/worksh/jenkins_rsync/rsync_cc-product-api_cn.sh: line 29: `product-api_rsync_all': not a valid identifier
    SSH: EXEC: completed after 201 ms
    SSH: Disconnecting configuration [sz_platform01] ... 
    
    # 确认问题,在jenkins服务器中模拟问题,确实报错了,但是在目标服务器 1.1.1.1中root切换到apache直接执行代码是没有问题的
    猜测可能是jenkins发布代码时使用了 source /etc/profile 导致环境变量不同引发的问题
    
    [apache@dev9_50:/root]$ ssh -p2025 apache@1.1.1.1 "/bin/sh /usr/local/worksh/jenkins_rsync/rsync_cc-product-api_cn.sh all"
    apache@1.1.1.1's password: 
    /usr/local/worksh/jenkins_rsync/rsync_cc-product-api_cn.sh: line 29: `product-api_rsync_all': not a valid identifier
    [apache@dev9_50:/root]$ 
    
    
    # 具体的脚本如下
    [root@sz_platform_web01:~]# cat /usr/local/worksh/jenkins_rsync/rsync_cc-product-api_cn.sh
    #!/bin/bash
    
    ##############jenkins拉取git代码同步到 1.1.1.1_sz_platform_web01 上,然后触发 1.1.1.1_sz_platform_web01 上的该脚本进行 szali 内网机房同步####################
    ###### rsync product-api.chinasoft.com data ######################################
    passwd="/data/www/.rsync/rsyncd.pass1"
    exclude_list="--exclude=logs/ --exclude=cache/ --exclude=.git --exclude=.gitignore --exclude=.gitattributes --exclude=store_data/ --exclude=invoice_file/"
    
    
    # szali_product_api_ip
    
    szali_product_api_ip_list="172.18.54.136"
    
    
    #############################################################
    
    # 同步所有机房
    function product-api_rsync_all()
    {
    # rsync szali_product-api
    for szali_product_api_ip in $szali_product_api_ip_list
    do    
        echo "####################rsync szali_product-api start################################"
            echo $szali_product_api_ip
        rsync -zavP --delete $exclude_list --password-file=$passwd /data/www/vhosts/product-api.chinasoft.com/ apache@$szali_product_api_ip::apache/data/www/vhosts/product-api.chinasoft.com/
        echo "################### rsync szali_product-api end #######################"
    done
    
    
    }
    
    # 只同步深圳机房
    function product-api_rsync_szali()
    {
    # rsync szali_product-api
    for szali_product_api_ip in $szali_product_api_ip_list
    do    
        echo "####################rsync szali_product-api start################################"
            echo $szali_product_api_ip
        rsync -zavP --delete $exclude_list --password-file=$passwd /data/www/vhosts/product-api.chinasoft.com/ apache@$szali_product_api_ip::apache/data/www/vhosts/product-api.chinasoft.com/
        echo "################### rsync szali_product-api end #######################"
    done
    }
    
    
    
    #####################  MAIN  ###############################
    usage () {
            echo ""
            echo "  Please Input server infomation!"
            echo ""
            echo "  USAGE: `basename $0` [all|product-api_szali]"
            echo ""
    }
        
    if [ $# != 1 ]
    then
            usage >&2
            exit 1
    fi
    OPT=$1
    case $OPT in
    all)
            echo "start rsync `basename $0` to all apiservice servers"
            product-api_rsync_all
            ;;
    apiservice_szali)
            echo "start rsync `basename $0` to szali_product-api_servers"
            product-api_rsync_szali
        ;;
    
    *)
            echo "Usage:`basename $0` [all|product-api_szali]"
            ;;
    esac
    
    
    # 经过反复修改,发现是中划线的问题,将函数名统一更换为下划线即可_
    product-api_rsync_all --> 修改为 product_api_rsync_all
    
    product-api_rsync_szali --> 修改为 product_api_rsync_szali
  • 相关阅读:
    【FIRST USE】第一次用git把代码上传到github
    [多线程学习笔记] 一个线程安全的队列
    C中宏展开问题
    C语言中的命名空间
    c语言中赋值语句的结果
    Python一些难以察觉的错误
    C语言中的内存压缩技术
    简述数据结构:二叉查找树
    指针与指针的引用、指针的指针
    C++ 中的virtual关键词
  • 原文地址:https://www.cnblogs.com/reblue520/p/11252506.html
Copyright © 2011-2022 走看看