這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
#!/bin/bashexport PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/binclearprintf "# Name: Downtown_Shell_Deploy_Script## Purpose:Deploy tar.gz to the host## Notes:# 1 Upload your tar.gz file to the path /data/source ## 2 ./script_name Filename.postfix# For Example:./New_UPDATE_nodejs_tar_update.sh buffetmealapi.tar.gz## Return codes:# 啟動時間 啟動程式# 14:26 nodejs########################################################"#check userif [ $(id -u) != "0" ]then echo "Error: You must be root to run this script!!!" exit 1fiif [ -z "$1" ];thenecho "Usage:script.sh file.tar.gz"exitelseecho "執行檔案名稱: $1"fi#DefineProject_Name_file=$1 #buffetmealapi.tar.gzProject_Name=${Project_Name_file%%.*} #buffetmealapiINIT_SCRIPT_URL=/data/sourceConfig_URL=/data/configProject_Name_Suffix=${Project_Name_file#*.} #tar.gz##工程目錄PROJECT_NODE_APP_PATH="/data/app/eshine/$Project_Name"##源設定檔範本目錄PROJECT_NODE_APP_CONFIG_TEMPLATES_PATH="/data/app/eshine/$Project_Name/config-templates" #/data/app/eshine/storeapi/config-templates/##目標設定檔目錄PROJECT_NODE_APP_CONFD_PATH="/data/app/confd/config/$Project_Name" #/data/app/confd/config/storeapifunction_deploy_tar_gz(){ source /etc/profile echo -e "\033[31m Make Sure REMOVE THIS HOST FROM LVS---LVS---LVS,5 seconds to think? press ctrl+C to cancel \033[0m" sleep 2 #停止shell應用ps -ef | grep /data/app/eshine/$Project_Name | grep -v grep | awk '{ print "kill -9 " $2}' | bash sleep 3 #建立備份目錄 mkdir -p /data/backup/$(date +%Y%m%d%H%M) #建立app工作目錄 mkdir -p /data/app/eshine #更新前備份 if [ -d "/data/app/eshine/$Project_Name" ];then mv /data/app/eshine/$Project_Name /data/backup/$(date +%Y%m%d%H%M)/ echo "###############################################################" echo -e "# $Project_Name backup complated! #" echo "###############################################################" else echo "###############################################################" echo -e "# Warning : $Project_Name does not exist! #" echo "###############################################################" fi #解壓新app包 cd /data/source tar -zxf $Project_Name_file -C ./ #部署應用 rm -rf /data/app/eshine/$Project_Name mv $Project_Name /data/app/eshine/ #更新設定檔並啟用confd監測#先結束掉該項目的confd進程ps -ef | grep confd/config/$Project_Name | grep -v grep | awk '{ print "kill -9 " $2}' | bashecho "==============================="echo "[confd] for $Project_Name killed"echo "==============================="#清理confd項目目錄rm -rf $PROJECT_NODE_APP_CONFD_PATHmkdir -p $PROJECT_NODE_APP_CONFD_PATH/conf.dmkdir -p $PROJECT_NODE_APP_CONFD_PATH/templatesls $PROJECT_NODE_APP_CONFD_PATH##複製設定檔到指定目錄find $PROJECT_NODE_APP_CONFIG_TEMPLATES_PATH -type f -name "*.*" -exec cp -fr {} $PROJECT_NODE_APP_CONFD_PATH/templates \;echo ========templates copied=====================ls $PROJECT_NODE_APP_CONFD_PATH/*/*echo ========templates copied=====================##產生模式化檔案format_standard.txt##格式為:檔案名稱 檔案路徑##清空format_standard.txt檔案echo "" > $PROJECT_NODE_APP_CONFD_PATH/format_standard.txt##提取PROJECT_NODE_APP_CONFIG_TEMPLATES_PATH目錄內的子目錄作為變數,並提出所有檔案名稱PROJECT_NODE_APP_CONFIG_TEMPLATES_L2_LIST=`cd $PROJECT_NODE_APP_CONFIG_TEMPLATES_PATH ; find $PWD | xargs ls -dl | grep -v "^d" | awk 'BEGIN{FS="/"} {print $(NF-1)"/"$NF}'`#i代表的是$PROJECT_NODE_APP_CONFIG_TEMPLATES_L2_LIST輸出出來的所有檔案的相對路徑echo ========config file need to be generate =====================echo "${PROJECT_NODE_APP_CONFIG_TEMPLATES_L2_LIST}"echo ========config file need to be generate =====================cd $PROJECT_NODE_APP_CONFD_PATHfor i in $PROJECT_NODE_APP_CONFIG_TEMPLATES_L2_LISTdo if [ -f $PROJECT_NODE_APP_PATH/$i ];then find $PROJECT_NODE_APP_PATH/$i -type f -name "*.*" |awk 'BEGIN{FS="/"} {printf("%30s\t%s\n",$NF,$0)}' >> $PROJECT_NODE_APP_CONFD_PATH/format_standard.txt fidonefor i in $PROJECT_NODE_APP_CONFIG_TEMPLATES_L2_LISTdo if [ -f $PROJECT_NODE_APP_PATH/config/$i ];then find $PROJECT_NODE_APP_PATH/config/$i -type f -name "*.*" |awk 'BEGIN{FS="/"} {printf("%30s\t%s\n",$NF,$0)}' >> $PROJECT_NODE_APP_CONFD_PATH/format_standard.txt fidoneecho "################# format_standard.txt############"cat $PROJECT_NODE_APP_CONFD_PATH/format_standard.txtecho "################# format_standard.txt############"##遍曆格式檔案並產生模板檔案cd $PROJECT_NODE_APP_CONFD_PATHcat format_standard.txt |awk 'NR>1' |while read F_CONFIG_NAME F_CONFIG_PATHdo ##產生模板檔案 cat << EOF > conf.d/$F_CONFIG_NAME.toml[template]#模板檔案,基於它進行修改src = "$F_CONFIG_NAME"#目標檔案地址dest = "$F_CONFIG_PATH"#keys是在etcd上訂閱訊息的首碼keys = ["",]#更新配置後的命令reload_cmd = "/data/scripts/restart-${Project_Name}_guard.sh"EOFdone#顯示該項目的confd進程數ps -ef | grep confd/config/$Project_Name | grep -v grep | wc -lexport ETCDCTL_API=2nohup /data/app/confd/bin/confd -config-file /data/app/confd/confd.config -confdir /data/app/confd/config/$Project_Name/ -username root -password Downtown2013 -basic-auth true > /data/app/confd/config/$Project_Name/confd_$Project_Name.log 2>&1 &echo "==============================="echo "[confd] for $Project_Name Started"echo "===============================" #啟動app chmod 755 /data/app/eshine/$Project_Name/$Project_Name chmod 755 /data/app/eshine/$Project_Name/*.py cd /data/app/eshine/$Project_Name pwd ps -ef | grep /data/app/eshine/$Project_Name | grep -v grep | awk '{ print "kill -9 " $2}' | bash sleep 15 nohup /data/app/eshine/$Project_Name/$Project_Name >>/data/logs/$Project_Name.log 2>&1 &}#######Deploy War Done##########Decide which script to be run by Project_Name_Suffixcase $Project_Name_Suffix in tar.gz) function_deploy_tar_gz ;; *) echo ".tar.gz allowed only"esacecho ======計劃任務========crontab_add(){#根據系統定義crontab路徑SYSTEM_OS=`lsb_release -a |grep Description |awk -F : '{print $2}' |sed 's/^[ \t]*//g'`echo ""echo "=== SYSTEM_OS is $SYSTEM_OS===="echo ""if [[ $SYSTEM_OS =~ Ubuntu ]];thenCRONTAB_FILE_FOR_ROOT="/var/spool/cron/crontabs/root"echo "====Crontab Path is $CRONTAB_FILE_FOR_ROOT"elseCRONTAB_FILE_FOR_ROOT="/var/spool/cron/root"echo "====Crontab Path is $CRONTAB_FILE_FOR_ROOT"fi#添加新croncd /data/app/eshine/$Project_Nameif [ -f crontab/time.txt ];thensed -i '/python/d' $CRONTAB_FILE_FOR_ROOT sed -i /$Project_Name/d $CRONTAB_FILE_FOR_ROOTcat ./crontab/time.txt |egrep -v "^#|^$" >> $CRONTAB_FILE_FOR_ROOTsed -i '/python/ s/python/cd \/data\/app\/eshine\/MenuRank; python/' $CRONTAB_FILE_FOR_ROOTfi#立即啟動並執行任務if [ -f crontab/once.txt ];thenchmod 755 crontab/once.txt./crontab/once.txtfi#查看定時任務狀態echo "################ 系統計劃工作清單Start ################"cat $CRONTAB_FILE_FOR_ROOTecho "################ 系統計劃工作清單End ################"}Crontab_dir=/data/app/eshine/$Project_Name/crontabif [ ! -d "$Crontab_dir" ]; thenecho "#######沒有crontab目錄#######"elsemain(){crontab_add}mainfiexit 0