shell脚本收录

shell中传map参数, 参见https://cloud.tencent.com/developer/article/1486482

1.获取cpu,内存,磁盘写日志脚本

#! /bin/bash

#要监控的进程
process_name=(MainApp filebeat)
#该脚本跑的log存放在哪
script_path=/opt/sysinfo
json_file=$script_path/basic-$(date +%Y%m%d).log
cd $script_path

source /etc/profile
source /etc/bashrc

function get_ip()
{
    serverIp=$(ifconfig | grep inet | grep -v inet6 | grep -v 127.0.0.1 | awk '{print $2}')
}

declare -A cpu_obj
function get_cpu()
{
    cpu_obj=(["ip"]="$serverIp" ["type"]=1 ["value"]="")
    cpu_use=$(vmstat | awk '{if(NR==3) printf "%.1f",$13+$14}')
    cpu_obj["value"]="$cpu_use"
}

declare -A mem_obj
function get_mem()
{
    mem_obj=(["ip"]="$serverIp" ["type"]=2 ["value"]="")
    mem_total=$(free -m | awk '{if(NR==2) printf "%.1f",$2}')
    mem_use=$(free -m | awk '{if(NR==2) printf "%.1f",$3}')
    mem_used=`awk 'BEGIN{printf "%.0f\n",('$mem_use'/'$mem_total')*100}'`
    mem_obj["value"]=$mem_used
}

declare -A disk_obj
function get_disk()
{
    disk_obj=(["ip"]="$serverIp" ["type"]=3 ["value"]="")
    disk_rate=$(df -TH | grep "/" | awk '{print $6}')
    disk_max=0
    for disk in $disk_rate
    do
	disk=$[${disk/'%'/}]
	if [ $disk_max -lt $disk ]
	then
	    disk_max=$disk
	fi
    done
    disk_obj["value"]="$disk_max"
}

function get_process()
{
    process_str="["
    i=0
    for pn in "${process_name[@]}"
    do
    	declare -A local process_each
    	process_each=(["ip"]="$serverIp" ["type"]=4 ["name"]="" ["value"]="")
	process_each["name"]="$pn"
        be_running=$(ps -ef | grep $pn | grep -v grep | wc -l)
	#有多个就取第一个
        if [ $be_running -gt 0 ]
        then 	
            process_pid=$(ps -ef | grep $pn | grep -v grep | awk '{if(NR==1) print $2}')
	    process_each["value"]="$process_pid"
        fi
	process_str="${process_str}$(json_map process_each)"	
	
	if [ $i -eq $[${#process_name[*]}-1] ]
	then
	    process_str="${process_str}]"
	else
            process_str="${process_str},"
	fi
	i=$[$i+1]
    done
}

function json_map()
{

    local var=$(declare -p "$1")
    # 重新创建一个临时map变量ref
    eval "declare -A local map"=${var#*=}
    rstr="{"
    i=0
    for key in ${!map[*]}
    do
       if [ $i -eq $[${#map[@]}-1] ]
       then
            rstr="${rstr}\"$key\": \"${map[$key]}\""
       else
            rstr="${rstr}\"$key\": \"${map[$key]}\","
       fi
       i=$[$i+1]
    done
    rstr="${rstr}}"
    echo $rstr
}

#先获取ip
get_ip
while :
do

    if [ ! -b "$json_file" ];then
        touch $json_file
    fi

    #获取基础属性
    get_cpu
    get_mem
    get_disk
    echo $(json_map cpu_obj) >> $json_file 
    echo $(json_map mem_obj) >> $json_file 
    echo $(json_map disk_obj) >> $json_file

    #获取进程
    get_process
    echo $process_str >> $json_file
    
    sleep 10
done

 

2. mysql 备份

#!/bin/bash

# 以下配置信息请自己修改
mysql_user="root" #MySQL备份用户
mysql_password="yourpassword" #MySQL备份用户的密码
mysql_host="localhost"
mysql_port="3306"
mysql_charset="utf8" #MySQL编码
backup_db_arr=("dbname") #要备份的数据库名称,多个用空格分开隔开 如("db1" "db2" "db3")
backup_location=/data2/backup2  #备份数据存放位置,末尾请不要带"/",此项可以保持默认,程序会自动创建文件夹
expire_backup_delete="ON" #是否开启过期备份删除 ON为开启 OFF为关闭
expire_days=6 #过期时间天数 默认为三天,此项只有在expire_backup_delete开启时有效

# 本行开始以下不需要修改
backup_Ymd=`date +%Y-%m-%d` #定义备份目录中的年月日时间
backup_dir=$backup_location/$backup_Ymd  #备份文件夹全路径
welcome_msg="Welcome to use MySQL backup tools!" #欢迎语

# 判断MYSQL是否启动,mysql没有启动则备份退出
mysql_ps=`ps -ef |grep mysql |wc -l`
mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l`
if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then
        echo "ERROR:MySQL is not running! backup stop!"
        exit
else
        echo $welcome_msg
fi

# 连接到mysql数据库,无法连接则备份退出
mysql -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password <<end
use mysql;
select host,user from user where user='root' and host='localhost';
exit
end

flag=`echo $?`

if [ $flag != "0" ]; then
        echo "ERROR:Can't connect mysql server! backup stop!"
        exit
else
        echo "MySQL connect ok! Please wait......"
        # 判断有没有定义备份的数据库,如果定义则开始备份,否则退出备份
        if [ "$backup_db_arr" != "" ];then
                #dbnames=$(cut -d ',' -f1-5 $backup_database)
                #echo "arr is (${backup_db_arr[@]})"
                logId=`mysql -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -sN -Dmysql_backup -e "INSERT INTO mysql_backup_log (mysql_host, start_time,  host) VALUES ('127.0.0.1', now(),  '127.0.0.1');SELECT LAST_INSERT_ID();"`

                for dbname in ${backup_db_arr[@]}
                do
                        echo "database $dbname backup start..."

                        `mkdir -p $backup_dir`
                        `mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $dbname --default-character-set=$mysql_charset | gzip > $backup_dir/$dbname.sql.gz`
                        flag=`echo $?`
                        if [ $flag == "0" ];then
                                echo "database $dbname success backup to $backup_dir/$dbname.sql.gz"
                        else
                                echo "database $dbname backup fail!"
                        fi
                        
                done
                
                files=`ls $backup_dir|awk 'BEGIN{ret=""}{ret=ret","$0}END{print substr(ret,2)}'`
                mysql -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -sN -Dmysql_backup -e "update mysql_backup_log set end_time=now(),note='${files}' where id=$logId"


        else
                echo "ERROR:No database to backup! backup stop"
                exit
        fi
        # 如果开启了删除过期备份,则进行删除操作
        if [ "$expire_backup_delete" == "ON" -a  "$backup_location" != "" ];then
                 #`find $backup_location/ -type d -o -type f -ctime +$expire_days -exec rm -rf {} \;`
                 `find $backup_location/ -type d -mtime +$expire_days | xargs rm -rf`
                 echo "Expired backup data delete complete!"
        fi
        echo "All database backup success! Thank you!"
        exit
fi



create  database mysql_backup

CREATE TABLE `mysql_backup_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `mysql_host` varchar(30) NOT NULL,
  `start_time` datetime DEFAULT NULL,
  `end_time` datetime DEFAULT NULL,
  `host` varchar(30) DEFAULT NULL,
  `note` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ;



crontab -e

00 03 * * * /root/mysql_backup.sh

  

 

posted @ 2022-11-17 11:26  trump2  阅读(23)  评论(0)    收藏  举报