版权 © 2011, 2012 http://netkiller.github.com
摘要
本程序用于收集,防火墙,路由器,交换机等日志
下面是我多年积累下来的经验总结,整理成文档供大家参考:
- #!/bin/bash
- #####################################################################
- # Description: Automation Deployment Script
- # Netkiller series utilities
- # Author: Neo<openunix@163.com>
- # Homepage: http://netkiller.sourceforge.net/
- # $Id$
- #####################################################################
- if [ -z $DEPLOY_HOME ]; then
- echo 'Example: export DEPLOY_HOME=/srv/deploy'
- exit
- fi
- if [ -f $DEPLOY_HOME/conf/default.conf ];then
- . $DEPLOY_HOME/conf/default.conf
- fi
- #================================================================================
- LOGFILE="deploy.$(date -d "today" +"%Y-%m-%d").log"
- TMPDIR=$(mktemp -d --suffix=.tmp -p /tmp deploy.XXXXXX)
- #SUBVERSION=
- SVN=/usr/bin/svn
- TIMEPOINT=`date '+%Y%m%d-%H%M%S'`
- BACKUPDIR=$TMPDIR/backup/${TIMEPOINT}
- RSYNC="rsync"
- UPLOAD_DIR=$TMPDIR
- REVISION=''
- #================================================================================
- if [ ! -d ${TMPDIR} ]; then
- mkdir ${TMPDIR}
- fi
- if [ ! -d ${BACKUPDIR} ]; then
- mkdir -p $BACKUPDIR
- fi
- #pkgname=${project}-${version}-${datetime}.pkg
- #tar jcvf ${pkgname} /tmp/${project} --remove-files >> deploy.log
- #####################################################################
- function usage(){
- echo $"Usage: $0 [OPTION] <server-id> <directory/timepoint>"
- echo -ne "
- OPTION:
- deploy <domain> <host>
- revert <domain> <host> <revision>
- backup <domain> <host> <directory>
- list
- list <domain> <host>
- import <domain> <host> <dir>
- export <domain> <host> <dir>
- clean <domain> <host>
- log <project> <line>
- conf list
- conf new <project>
- conf remove <project>
- conf show <project>
- conf edit <project>
- cron show
- cron setup
- cron edit
- "
- exit
- }
- function logging(){
- local logfile="$LOGDIR/$LOGFILE"
- local timepoint=$(date -d "today" +"%Y-%m-%d_%H:%M:%S")
- local status=$1
- local message=$2
- echo "[$timepoint] [${status}] ${message}" >> $logfile
- }
- #logging 'OK' 'This is test msg!!!'
- function conf(){
- local cmd=$2
- local prj=$3
- case $cmd in
- list)
- ls $SYSCONFDIR
- ;;
- new)
- read -p "Project directory: " prjdir
- if [ -z $prjdir ]; then
- exit
- fi
- if [ -f $SYSCONFDIR/$prjdir.conf ]; then
- echo "cannot create config $prjdir.conf': File exists"
- exit 1
- fi
- read -p "subversion url: $REPOSITORIES/: " svnurl
- if [ -z $svnurl ]; then
- svnurl=$REPOSITORIES
- fi
- read -p "hostname: " host
- if [ -z $host ]; then
- host="localhost"
- echo "default hostname 'localhost'"
- fi
- read -p "upload mode ftp/scp/sftp/rsync: " mode
- if [ -z $mode ]; then
- mode=ftp
- else
- case $mode in
- ftp)
- mode="ftpdeploy"
- ;;
- scp)
- mode="scpdeploy"
- ;;
- sftp)
- mode="sftpdeploy"
- ;;
- rsync)
- mode="rsync"
- ;;
- esac
- fi
- read -p "Create $prjdir config? [y/n]" -n 1 key
- echo
- if [ $key = 'y' ]; then
- echo -ne "REPOSITORIES=$REPOSITORIES/$svnurl
- COMMAND=$mode
- HOSTNAME=$host
- " >> $SYSCONFDIR/$prjdir.conf
- fi
- ;;
- remove)
- if [ -f $SYSCONFDIR/$prj ]; then
- rm -rf $SYSCONFDIR/$prj
- fi
- ;;
- show)
- cat $SYSCONFDIR/$prj
- ;;
- edit)
- vim $SYSCONFDIR/$prj
- ;;
- *)
- usage
- ;;
- esac
- }
- #####################################################################
- function config {
- local cfg=$1
- exclude_from=$PREFIX/exclude/${cfg}.lst
- include_from=$PREFIX/include/${cfg}.lst
- if [ -f $SYSCONFDIR/${cfg}.conf ];then
- . $SYSCONFDIR/${cfg}.conf
- else
- echo "Please provide the config($SYSCONFDIR/${cfg}.conf) to deploy!"
- exit
- fi
- if [ -z "$cfg" ]; then
- echo "Please provide the path for deploy!"
- exit
- fi
- if [ ! -f $exclude_from ]; then
- echo "Please provide a list of excluded in the $exclude_from."
- exit
- fi
- if [ ! -f $include_from ]; then
- echo "Please provide a list of included in the $include_from."
- exit
- fi
- }
- function deploy() {
- local domain=$2
- local host=$3
- local logfile=${LOGDIR}/${host}.${domain}.log
- if [ -z $domain ]; then
- usage
- fi
- config ${domain}/${host}
- project=$SRCDIR/${domain}/$host.${domain}
- SVN_OPTS=${REVISION}
- if [ -d ${project} ]; then
- $SVN update ${SVN_OPTS} $project >> $logfile
- logging 'update' ${project}
- else
- mkdir -p ${project}
- $SVN checkout ${REPOSITORY} ${project} >> $logfile
- logging 'checkout' ${project}
- fi
- # $BINDIR/$COMMAND deploy $HOSTNAME $UPLOAD_DIR/$ver/
- RSYNC_OPTS=" -azvP --backup --backup-dir=${BACKUPDIR} --exclude=.svn --log-file=${logfile} --exclude-from=$exclude_from --include-from=$include_from"
- if [ -f ${LIBEXECDIR}/${domain}/${host}/before ];then
- /bin/sh ${LIBEXECDIR}/${domain}/${host}/before
- fi
- find $SRCDIR/* -type f -name "Thumbs.db" -exec rm -rf {} \;
- for addr in ${REMOTE}
- do
- case ${MODE} in
- FTP)
- ftpdeploy
- ;;
- SCP)
- scp -ar ${project}/* ${addr}:${DESTINATION}
- ;;
- SFTP)
- sftpdeploy
- ;;
- RSYNC)
- $RSYNC $RSYNC_OPTS $OPTION ${project}/* ${addr}::${DESTINATION}
- ;;
- "RSYNC+SSH")
- $RSYNC $RSYNC_OPTS ${project}/* ${addr}:${DESTINATION}
- ;;
- esac
- if [ -d ${SHAREDIR}/current/${domain}/${host}/ ]; then
- cp -a ${SHAREDIR}/current/${domain}/${host}/* ${project}/
- fi
- if [ -z "${REVISION}" ]; then
- logging 'revert' "${project} => ${addr}:${DESTINATION}"
- else
- logging 'deploy' "${project} => ${addr}:${DESTINATION}"
- fi
- done
- if [ -f ${LIBEXECDIR}/${domain}/${host}/after ];then
- #ssh ${scp} < ${LIBEXECDIR}/${domain}/${host}/after
- exit
- fi
- }
- function revert() {
- local domain=$2
- local host=$3
- local revision=$4
- if [ -z $domain ]; then
- usage
- fi
- if [ -z $host ]; then
- usage
- fi
- if [ -z $revision ]; then
- usage
- else
- REVISION="-r ${revision}"
- fi
- #echo $domain , $host, $dir; exit
- deploy $@
- }
- function import(){
- local domain=$2
- local host=$3
- local dir=$4
- if [ -z $domain ]; then
- usage
- fi
- if [ -z $host ]; then
- usage
- fi
- if [ -z $dir ]; then
- usage
- fi
- config ${domain}/${host}
- $SVN import $dir ${REPOSITORY} >> $logfile
- }
- function export(){
- local domain=$2
- local host=$3
- local dir=$4
- if [ -z $domain ]; then
- usage
- fi
- if [ -z $host ]; then
- usage
- fi
- if [ -z $dir ]; then
- usage
- fi
- config ${domain}/${host}
- local logfile=${LOGDIR}/${host}.${domain}.log
- $SVN export --force ${REPOSITORY} ${dir} >> $logfile
- logging 'export' "${TRUNK} to ${dir}"
- }
- function timepoint {
- echo $TIMEPOINT >> timepoint.log
- }
- function unstable {
- local edition=$(basename $unstable)
- svn export ${unstable} ${src}/$edition
- for ignore in $( cat excluded.lst ); do
- rm -rf ${src}/$edition/$ignore
- done
- $RSYNC ${src}/$edition ${destination}
- ssh ${remote} < script/unstable
- }
- function clean() {
- local domain=$2
- local host=$3
- if [ -z $domain ]; then
- usage
- fi
- if [ -z $host ]; then
- usage
- fi
- local project=$SRCDIR/${domain}/$host.${domain}
- rm -rf ${project}
- }
- function list {
- local domain=$2
- local host=$3
- local dir=$4
- if [ -z $domain ]; then
- ls $SRCDIR/*
- exit
- fi
- if [ -z $host ]; then
- usage
- fi
- config ${domain}/${host}
- svn ls ${REPOSITORIES}/$dir #| awk -F '/' '{print $1}'
- }
- function backup() {
- local domain=$2
- local host=$3
- local dir=$4
- if [ -z $domain ]; then
- usage
- fi
- if [ -z $host ]; then
- usage
- fi
- local logfile=${LOGDIR}/${host}.${domain}.log
- config ${domain}/${host}
- if [ -z $dir ]; then
- dir=$TMPDIR
- fi
- for addr in ${REMOTE}
- do
- dir=$dir/${addr}
- if [ ! -d ${dir} ]; then
- mkdir -p $dir
- fi
- $RSYNC -auzvP $OPTION ${addr}::${DESTINATION} $dir >> ${logfile}
- logging 'backup' "rsync://${addr}::${DESTINATION} to ${dir}"
- echo 'Backup Directory:' $dir
- exit
- done
- }
- function cron(){
- local fun=$2
- case ${fun} in
- show)
- crontab -l
- ;;
- setup)
- cat $PREFIX/cron.d/crontab | crontab
- ;;
- edit)
- vim $PREFIX/cron.d/crontab
- cat $PREFIX/cron.d/crontab | crontab
- ;;
- *)
- usage
- ;;
- esac
- }
- function files {
- local project_dir=$1
- local project=$2
- if [ -z "$2" ]; then
- echo "Please provide the project name for deploy!"
- else
- config ${project}
- exclude_from=exclude/${project}.lst
- include_from=include/${project}.lst
- $RSYNC --exclude-from=$exclude_from --include-from=$include_from ${project_dir} ${remote}
- ssh ${scp} < script/${project}
- timepoint
- fi
- }
- function help {
- echo $"Usage: $0 {list|clean}"
- echo $" $0 subversion <project>"
- # echo $" $0 files <path> <project>"
- echo $" $0 revert <project> <time>"
- }
- case "$1" in
- deploy)
- deploy $@
- ;;
- revert)
- revert $@
- ;;
- import)
- import $@
- ;;
- export)
- export $@
- ;;
- backup)
- backup $@
- ;;
- # switch)
- # switch $2
- # ;;
- cron)
- cron $@
- ;;
- # files)
- # files $2 $3
- # ;;
- clean)
- clean $@
- ;;
- list)
- list $@
- ;;
- log)
- ls -1 $LOGDIR/*
- ;;
- conf)
- conf $@
- ;;
- *)
- usage
- exit 1
- esac