Мониторинг дискового пространства на нескольких серверах Linux с помощью сценария expect

В зависимости от размера файла вы можете просто использовать grep :

grep -Fxf A B

-f указывает файл, из которого нужно получить список шаблонов.

-x означает соответствие только всей строке (запретить соответствие части строки).

-F означает обрабатывать шаблоны как фиксированные строки, а не как регулярные выражения.

Если B меньше, чем A , вы можете получить немного более быстрые результаты, указав B в качестве файла шаблона ( grep -Fxf BA ]).

Вы можете направить вывод в sort -u , чтобы получить отсортированный список отдельных строк, которые встречаются в каждом файле:

grep -Fxf A B | sort -u

Конечно, если ваша проблема заключается в окончании строки возврата каретки, вы должны использовать Сначала dos2unix .

0
12.09.2018, 20:07
2 ответа

Используйте аутентификацию с закрытым ключом ssh, если можете :после того, как вы настроите ее, вам не нужно об этом думать. Также вам не нужно хранить пароль в виде обычного текста.

Кроме того, код намного сложнее:

#!/usr/bin/expect -f  

set server_list /tmp/DR.txt
set fh_hosts [open $server_list r]

# truncate the log file
set log_file /tmp/space_utilization.log  
close [open $log_file w]

set pass "Abcd@123"
set prompt_re {\$ $}

while {[gets $fh host] != -1} {
    spawn ssh -q $host  
    expect "assword:"  
    send "$pass\r"  
    expect -re $prompt

    set cmd "df -kh"
    send "$cmd\r"
    expect -re "$cmd\r\n(.*)\r\n$prompt"

    log_file $log_file
    send_log "\n"
    send_log "====Space utilization for server $host at [timestamp -format +"%Y-%m-%d %T"]===\n"
    send_log -- $expect_out(1,string)
    send_log "\n\n"
    log_file

    send "exit\r"
    expect eof
}
close $fh_hosts
0
28.01.2020, 02:31

Обязательно ли использовать expect? Можете ли вы просто иметь простую оболочку bash, которая удаленно запускает команду df через ssh и собирает информацию в один файл?

Если ключи ssh настроены правильно от вызывающего сервера ко всем серверам в вашем файле конфигурации, вам не нужно вводить никаких паролей. Следующий цикл соберет выходные данные df со всех серверов

while read -r h; do
    echo "=== Space utilization for ${h} ==="
    ssh "$h" df -kh
    echo ""
done </tmp/DR.txt >/tmp/space_utilization.log
2
28.01.2020, 02:31

Теги

Похожие вопросы