Список запросов серверов для памяти/CPU выделяется

Символ возврата каретки (\r) возвратится к началу текущей строки, таким образом, можно перезаписать текст:

printf "%s\r" "Process A is starting  "
sleep 5
printf "%s\r" "Process A is running   "
sleep 5
printf "%s\n" "Process A is completed."
4
16.10.2016, 16:25
3 ответа

Вы не можете только запустить скрипт как так?:

% ./query_host_info.sh <DEST> <USER> <FILE> > output.log 

- или -

% ./query_host_info.sh <DEST> <USER> <FILE> | tee output.log

Дополнительно можно использовать список команд, перенести набор команд в parens и перенаправить их вывод в файл.

% (ls; ls; ls;) > some_output.log
0
27.01.2020, 21:00
  • 1
    я мог абсолютно сделать это, моя проблема, хотя добирается' ssh -q -o "BatchMode yes" -o "ConnectTimeout 5" -l $USER $i "\ printf "$i "; echo "кошка/proc/cpuinfo | grep процессор | awk '{++} КОНЕЦ {печатает} '; свободный-g | sed-n-e '/^Mem:/s/^ [^0-9] * ([0-9] *).*/\1/p'";" >> ${DEST};' для работы правильно. –  gorelative 06.02.2013, 23:58
  • 2
    Да я просто заметил, что это не работало, позвольте мне смотреть, это - определенно проблема выхода, но что Вы делаете, является выполнимым. –  slm♦ 07.02.2013, 00:01
  • 3
    Изображенный это один путь, отправленный мой ответ. –  gorelative 07.02.2013, 00:25

Я понял это.. две вещи.. SSH не нравился связанный proc/cpuinfo и свободный, и я реорганизовал, как команды, работал.. Вероятно, путь лучший способ сделать это, но это, кажется, работает..

#!/bin/bash

# username to connect via ssh
USER=$2
# destination path/filename to save results to
DEST=$3
# source list of hostnames to read from
FILE=$1

# Iterate through line items in FILE and
# execute ssh, if we connected successfully
# run proc/info and free to find memory/cpu alloc
# write it to DEST path/file
# if we dont connect successfully, write the hostname
# and "unable to connect to host" error to DEST path/file
for i in `cat $FILE`; do
  echo -n ".";
  CHK=`ssh -q -o "BatchMode yes" -o "ConnectTimeout 5" \
            -l $USER $i "echo success"`;
  if [ "success" = $CHK ] >/dev/null 2>&1
  then
    A=`ssh -q -o "BatchMode yes" -o "ConnectTimeout 5" -l $USER $i "cat /proc/cpuinfo | grep processor | awk '{a++} END {print a}'"`
    B=`ssh -q -o "BatchMode yes" -o "ConnectTimeout 5" -l $USER $i "free -g | sed -n -e '/^Mem:/s/^[^0-9]*\([0-9]*\) .*/\1/p'"`
    echo "${i} CPU: ${A} MEMORY: ${B}" >> ${DEST}
  else
    printf "${i}\tUnable to connect to host\n" >> ${DEST};
  fi
done
# All line items have been gone through,
# show done, and exit out
echo ""
echo "Done!"
echo "Check the list 'checkssh_failure' for errors."
exit 0
0
27.01.2020, 21:00

Просто измененный Ваш сценарий:

#!/bin/bash
# username to connect via ssh
USER=$2
# destination path/filename to save results to
DEST=$3
# source list of hostnames to read from
FILE=$1

[[ $# -ne 3 ]] && { echo -e "\nUsage: $0  <User> <ServerList> <LogFile>\n"; exit 1; };

func_ssh() {
    local Ipaddr=$1
    local Cmd="${@:2}"
    local LogIt=${DEST}
    ssh -q -o "BatchMode yes" -o "ConnectTimeout 5" -l $USER $Ipaddr "${Cmd}"
    [[ $? -ne 0 ]] && printf "${Ipaddr}\tUnable to connect to host\n" >> ${LogIt}
}

GetTotalProcs="awk '/processor/{a++} END{print a}'  /proc/cpuinfo"
GetMemoryDetails="free -g | sed -n -e '/^Mem:/s/^[^0-9]*\([0-9]*\) .*/\1/p'"

# Iterate through line items in FILE and
# execute ssh, if we connected successfully
# run proc/info and free to find memory/cpu alloc
# write it to DEST path/file
# if we dont connect successfully, write the hostname
# and "unable to connect to host" error to DEST path/file
for srv in $(< $FILE );
do
    echo -n "."
    A="$( func_ssh $srv $GetTotalProcs )"
    B="$( func_ssh $srv $GetMemoryDetails )"
    echo "${srv} CPU: ${A} MEMORY: ${B}" >> ${DEST}
done

# All line items have been gone through,
# show done, and exit out
echo ""
echo "Done!"
echo "Check the list 'checkssh_failure' for errors."
exit 0
2
27.01.2020, 21:00

Теги

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