如何不耍流氓的做运维之-SHELL脚本小技巧

直接上脚本吧,详情请关注微信公众号吧,每天一篇小干货! [attach]59[/attach]
#!/bin/bash
#######################################################
# $Name:         shell_template.sh
# $Version:      v1.0
# $Function:     Backup MySQL Databases Template Script
# $Author:       Jason Zhao
# $organization: https://www.unixhot.com/
# $Create Date:  2016-08-27
# $Description:  You know what i mean,hehe
#######################################################

# Shell Env
SHELL_NAME="shell_template.sh"
SHELL_DIR="/opt/shell"
SHELL_LOG="${SHELL_DIR}/${SHELL_NAME}.log"
LOCK_FILE="/tmp/${SHELL_NAME}.lock"

#Write Log 
shell_log(){
    LOG_INFO=$1
    echo "$(date "+%Y-%m-%d") $(date "+%H-%M-%S") : ${SHELL_NAME} : ${LOG_INFO}" >> ${SHELL_LOG}
}

# Shell Usage
shell_usage(){
    echo $"Usage: $0 {backup}"
}

shell_lock(){
    touch ${LOCK_FILE}
}

shell_unlock(){
    rm -f ${LOCK_FILE}
}

# Backup MySQL All Database with mysqldump or innobackupex
mysql_backup(){
    if [ -f "$LOCK_FILE" ];then
        shell_log "${SHELL_NAME} is running"
        echo "${SHELL_NAME}" is running && exit
    fi
    shell_log "mysql backup start"
    shell_lock
    sleep 10
    shell_log "mysql backup stop"
    shell_unlock
}

# Main Function
main(){
    case $1 in
        backup)
            mysql_backup
            ;;
        *)
            shell_usage;
    esac
}

#Exec
main $1

2 个评论

写下我自己的模块函数,直接复制可用: 举一个例子: #!/bin/bash #*************************************************************************** # * # * @file:pid_run.sh # * @author:Luolired # * @date:2016-01-05 16:26 # * @version 0.5 # * @description: 节点提升为master调用的脚本 # * 1.脚本标准化 notify_master "/etc/keepalived/scripts/pid_run.sh" # * @Copyright (c) 007ka all right reserved # * @updatelog: # * 1.更新程序标准化逻辑性 # * 2.优化日志的输出 # * 3.增加同步锁状态标识,用以区分同步开启 # * 4.增加Keepalived主备切换功能开启锁,用以初始化启动抢占操作多开或Stop原有业务 #**************************************************************************/ export LANG=zh_CN.GBK 1.4.1 结果输出函数模块 ### Print error messges eg: _err "This is error" function _err() { #echo -e "\033[1;31m[ERROR] $@\033[0m" >&2 echo -e "\033[1;31m[ERROR] $@\033[0m" } ### Print notice messages eg: _info "This is Info" function _info() { #echo -e "\033[1;32m[Info] $@\033[0m" >&2 echo -e "\033[1;32m[Info] $@\033[0m" } 1.4.2 日志输出函数模块 ###LOG_PATH ###程序运行all日志输出路径 g_s_LOG_PATH=/var/applog/${G_LOG_FILE} mkdir -p $g_s_LOG_PATH g_s_LOGDATE=`date +"%F"` #执行脚本生成的日志 g_s_LOGFILE="${g_s_LOG_PATH}/pid_run.${g_s_LOGDATE}.log" ### LOG to file eg:g_fn_LOG "Test" g_fn_LOG() { s_Ddate=`date +"%F %H:%M:%S"` echo "[$s_Ddate] $*" >> $g_s_LOGFILE } 1.4.3 flock锁函数模块 ### Add flock Avoid more open program function _lock() { flock -n 3 [ $? -eq 1 ] && { _err "Fault $(basename $0) is Already in Runing,Plesase Waiting....^_^ GoodBye!!!"; exit; } _info "$(basename $0) Current Pid is:$$" _log "$(basename $0) Current Pid is:$$" sleep 50 } 3<>/tmp/$(basename $0 | awk -F. 'BEGIN{OFS="."};{NF=NF-1;print $0}').lock function main() { _lock } #main main
如果可以在github更新就好了。 那样可以有更多人看到

要回复文章请先登录注册