Примеры скрипта bash для контроля памяти в контейнере: различия между версиями
Материал из support.qbpro.ru
imported>Vix (Новая страница: «* Скрипт bash сам скрипт: <syntaxhighlight lang="shell" line='line'> #!/bin/bash # контроль свободной памяти в конте...») |
imported>Vix Нет описания правки |
||
Строка 8: | Строка 8: | ||
# | # | ||
playbooks="/etc/ansible/playbooks" | playbooks="/etc/ansible/playbooks" | ||
hosts=( " | hosts=( "dbsrv1" "dbsrv2" ); | ||
memswitch=( "2000" "2000" ); | memswitch=( "2000" "2000" ); | ||
Строка 34: | Строка 34: | ||
} | } | ||
testmem; | testmem; | ||
</syntaxhighlight> | |||
* playbook - getmem_dbsrv..: | |||
<syntaxhighlight lang="shell" line='line'> | |||
# 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 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Текущая версия от 01:00, 9 марта 2022
- Скрипт 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