Примеры скрипта bash для контроля памяти в контейнере
Материал из support.qbpro.ru
Версия от 01:00, 9 марта 2022; imported>Vix
- Скрипт bash
сам скрипт:
#!/bin/bash
# контроль свободной памяти в контейнере dbsrv & dbsrv2 - если меньше 2000 Mб = reboot dbsrv or dbsrv2 и restart mail & zabbix
# author Koshuba V. 2020
#
playbooks="/etc/ansible/playbooks"
hosts=( "dbsrv1" "dbsrv2" );
memswitch=( "2000" "2000" );
## Kb <> Byte
function Kb() { if [ ! ${input_unit[2]} ]
then eval ${input_unit[1]}=$(echo ${input_unit[0]}*1024|bc -lq);
else eval ${input_unit[1]}=$(echo "scale=0; ${input_unit[0]}/1024"|bc -lq);
fi }
function testmem() {
for ((ix=0; ix != ${#hosts[@]}; ix++))
do
freemem="$(ansible-playbook $playbooks/getmem_${hosts[$ix]}.yaml |grep MemFree|tail -1|awk '{print$2}')";
info_free_mem=0;
input_unit=( "$freemem" "info_free_mem" "1" );
Kb;
if [ $info_free_mem -lt ${memswitch[$ix]} ];
then
echo "$(date +%c) ${hosts[ix]} free memory $info_free_mem Mb -> then reboot ${hosts[ix]}">/var/log/syslog
/usr/bin/ansible-playbook $playbooks/reboot_${hosts[$ix]}.yaml
echo "$(date +%c) ${hosts[$ix]} free memory $info_free_mem Mb -> then reboot ${hosts[$ix]} "|mail -s "hostmain - ansible: ${hosts[$ix]} free memory $info_free_mem Mb -> then reboot" admin@myhost.ru
fi
done;
}
testmem;
- playbook - getmem_dbsrv..:
# get memory info for servers
- hosts: 10.1.0.7
become: yes
become_method: sudo
tasks:
- name: Check free memory
shell: "cat /proc/meminfo|grep MemFree"
register: free_mem
- debug: var=free_mem
- Описание работы:
1. Скрипт перебирает указанные плейбуки в имени которых есть имя хоста, если количество памяти мало то скрипт останавливает службы на других хостах и перегружает сервер базы данных через плейбук специально написанный для этого. 2. Параметр скрипта memswitch указывает минимальный размер памяти для нормальной работы. 3. Скрипт запускается раз в сутки через crontab