- 必須確保 client 永遠都讀得到資料
- 最小的資料中斷
- 最小的硬碟存取
- 必要的錯誤處理
建立 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;
0 回應:
張貼留言