[Shell]通过版本编号与远端的package同步
时间:2014-07-23 09:10 来源: 我爱IT技术网 作者:山风
有一个的任务是要将一个用 tar 封装的目录从 server 端同步到 client 上,然后有几个要点:
1、必须确保 client 永远都读得到数据
2、最小的数据中断几率
3、最小的硬碟存取
4、必要的错误处理
建立 server 端的 package演示
- #!/bin/bash
- # package_build.sh
- PATH=/bin:/sbin:/usr/bin:/usr/sbin
- export PATH
- PROJECT_NAME=metadata
- SOURCE_PATH=/var/projects
- PORTING_PATH=/var/www
- PACKAGE_NAME=$PROJECT_NAME.$(/bin/date +%s)
- OLD_PACKAGE=$(find $PORTING_PATH -name "$PROJECT_NAME.*.tgz")
- # Create Package
- cd $SOURCE_PATH/$PROJECT_NAME
- tar -zcf $PORTING_PATH/$PACKAGE_NAME.tgz ./*
- # Update version number to release
- echo $PACKAGE_NAME > $PORTING_PATH/$PROJECT_NAME.latest
- # remove old version
- #rm -f $OLD_PACKAGE
- echo -e "<< $PACKAGE_NAME package complete >>"
- exit 0
client 端的同步处理演示:
- #!/bin/bash
- # package_sync.sh
- PATH=/bin:/sbin:/usr/bin:/usr/sbin
- export PATH
- REMOTE_URL=http://remote_site/
- TARGET_PATH=/var/www
- PROJECT_NAME=metadata
- PROJECT_PATH=$TARGET_PATH/$PROJECT_NAME
- # get now version
- NOW_VERSION=$PROJECT_NAME.0000000000
- if [ -h "$PROJECT_PATH" ] && [ -d "$PROJECT_PATH" ]; then
- NOW_VERSION=$(readlink $PROJECT_PATH)
- fi
- echo -e 'NOW_VERSION' $NOW_VERSION
- # get remote version
- REMOTE_VERSION=$(curl -f $REMOTE_URL/$PROJECT_NAME.latest |tr -d '\r')
- if [ "j$?" != "j0" ]; then exit 1; fi
- echo -e 'REMOTE_VERSION' $REMOTE_VERSION
- # deff version, not deff goto exit.
- if [ ! "$NOW_VERSION" \< "$REMOTE_VERSION" ]; then exit 0; fi
- echo -e "Update package"
- # create now version folder
- mkdir -p $TARGET_PATH/$REMOTE_VERSION
- if [ "$?" != "0" ]; then exit 1; fi
- # Download Package
- cd $TARGET_PATH/$REMOTE_VERSION
- curl -o $PROJECT_NAME.tgz $REMOTE_URL/$REMOTE_VERSION.tgz
- if [ "$?" != "0" ]; then exit 1; fi
- # Decompression Package
- tar -zxf $PROJECT_NAME.tgz
- rm -f $PROJECT_NAME.tgz
- # Update version link
- cd $TARGET_PATH
- ln -sfn $REMOTE_VERSION $PROJECT_NAME
- # remove old version
- rm -rf $NOW_VERSION
- exit 0;
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
