Примеры скрипта 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=( "dbsrv" "dbsrv2" );
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