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
无聊我就学英语

浙公网安备 33010602011771号