К основному контенту

Проверка идентичности файлов на 100+ серверах.

Задача: подтверждение идентичности групп файлов на большом количестве серверов.

Решение: состоит из 4 файлов, 2 пакетных, текстового (со списком серверов) и файла powershell.


1. основной файл:

rem создание необходимых для работы директорий.
if not exist log md log
if not exist temp md temp

rem для всех файлов из servers.txt вызываем файл из п.2
for /f %%i in (server.txt) do start /MIN call robo.cmd %%i
 

rem ждем пока не отработают все задания сбора статистики
:StartLoop
ping 127.0.0.1 /n 5
if exist temp\*p.lock GoTo :StartLoop


rem на основе файлов отчета по каждому серверу создаем один общий
findstr /i "older newer new" log\*.log > log\SOFT_STAT.txt


rem вызов сценария powershell. форматирование итогового файла 
rem (нужно, чтоб потом загрузить результат в БД)
powershell -file replace.ps1 "log\SOFT_STAT.txt"


2. robo.cmd сбор статистики для одного сервера (из списка servers.txt)

@echo off
rem проверка физической доступности опрашиваемого сервера.
ping %1 /n 1 || (echo workstation is OFFLINE >"log\%1.log" & goto end)
 

rem преобразуем hostname в ip
FOR /F "tokens=2,3" %%A IN ('ping %1 -n 1 -4') DO IF "from"== "%%A" set "IP=%%~B"
echo %IP:~0,-1%


rem собственно net use

net use \\%IP:~0,-1%\c$ /user:localhost\dbax p@s$W0rd || (echo "net use failed" > "log\%1.log" & goto end)

rem создание .lock файла служит для того чтобы файл из п.1 дождался rem окончания работы всех отдельно запущенных .cmd
echo null > temp\%1.lock

rem сравнение файлового состава эталонного сервера с удаленным.

rem используется утилита robocopy с ключом /L
robocopy etalon\\%IP:~0,-1%\remote_path *.* /e /LOG:"log\%1.log" /NP /NDL /L /NJH /NJS /BYTES

rem отключение net use (просто для красоты)

net use \\%%IP:~0,-1%\c$ /delete

rem удаляем файл .lock - сигнализируем верхнему скрипты, что работа rem по серверу завершена
del temp\%1.lock

:END
exit


3. replace.ps1. Форматируем итоговый файл.

# принимаем параметры из предъидущего командного файла
# в нашем случае - это имя файла отчета log\SOFT_STAT.txt
param(
  [string]$file
)


# удаляем префикс и расширение log в первом столбце отчета
(Get-Content $file) | Foreach-Object {
$_ -replace ("^log\\"), ("")
}| Set-Content $file


(Get-Content $file) | Foreach-Object {
$_ -replace (".log:"), ("")
}| Set-Content $file


# окружаем описание файла кавычками. Пригодится, если в именах
# каталогов есть пробелы и есть необходимосто потом гузить результат # в базу
(Get-Content $file) | Foreach-Object {
$_ -replace ("`c:"), ("`"c:")
}| Set-Content $file
(Get-Content $file) | Foreach-Object {
$_ -replace ("$"), ("`"")
}| Set-Content $file


4. servers.txt список серверов - просто текстовый файл вида:
server1
server2

В итоге получаем отчет вида:
сервер      Older              6382592    "c:\myprogr\myprogr.exe"

Для выравнивания состава ПО на серверах достаточно убрать /L в команде robocopy


Комментарии

Популярные сообщения из этого блога

Установка и настройка pgAgent(планировщика заданий PostgreSQL)

Установка pgAgent Последняя версия скрипта для установки агента  тут . Перенести инструкцию по агенту в отдельную тему. 1. Создать пользователя ОС, и сделать ему домашний каталог: useradd -s /bin/false -r -M pgagent mkdir /home/pgagent 2. Установить и настроить демон: yum install pgagent_94 При наличии ошибок вида (была на Oracle Linux 6.8) Error: Package: pgagent_94-3.4.0-1.rhel6.x86_64 (pgdg94)            Requires: libwx_baseu-2.8.so.0(WXU_2.8)(64bit) Нужно установить EPEL systemctl enable pgagent_94 chown pgagent:pgagent /var/log/pgagent_94.log 3. Установить схему агента в базе: sudo -u postgres psql -f /usr/share/pgagent_94-3.4.0/pgagent.sql postgres 4. Создать файл паролей для подключения агента к базе. vi /home/pgagent/.pgpass localhost:5432:*:postgres:postgres chown pgagent.pgagent /home/pgagent -R chmod 600 /home/pagent/.pgpass 5. Запустить и проверить работу агента systemctl start pgagent_94.service systemctl status pga

Включение логирования для Haproxy

Изначально логирование в syslog в HaProxy отключено. Ниже пример настройки логирования для ОС Centos 7. Настройка: Добавить строку  log 127.0.0.1 local2 в секцию global файла /etc/haproxy/haproxy.cfg Раскомментировать $ModLoad imudp и $UDPServerRun 514 в файле  /etc/rsyslog.conf Создать файл  /etc/rsyslog.d/haproxy.conf со следующим содержимым:  local2.* /var/log/haproxy.log Перезапустить rsyslog и haproxy.

Использование oraenv для установки окружения.

Для настройки окружения в Linux можно все параметры базы указать в .bash_profile: ORACLE_HOME=/app/oracle/product/11.2.0.4/dbhome_1 export ORACLE_HOME ORACLE_BASE=/app/oracle export ORACLE_BASE ORACLE_SID=orcl export ORACLE_SID PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin export PATH Но лучше использовать для этих целей утилиту oraenv. oraenv берет данные из файла /etc/oratab orcl:/app/oracle/product/12.1.0/dbhome_1:N И на ее основе задает параметры окружения: ORACLE_SID, ORACLE_BASE,ORACLE_HOME и PATH Использовать можно в интерактивном режиме: . oraenv ORACLE_SID = [orcl] ? orcl The Oracle base has been set to /app/oracle И в неинтерактивном режиме. Добавить в  .bash_profile: ORACLE_SID=orcl ORAENV_ASK=NO . oraenv Для ASM ситуация аналогичная. . oraenv ORACLE_SID = [orcl] ? +ASM1 The Oracle base has been set to /u01/app/oracle echo $ORACLE_HOME /app/11.2.0/grid