stdout все сразу вместо линии по линии -- linux поле с участием bash пол Связанный проблема

stdout all at once instead of line by line


1
vote

проблема

русский

Я написал сценарий, который получает информацию о загрузке и MEM для списка серверов SSH'ing на каждый сервер. Однако, поскольку около 20 серверов есть не очень эффективно, чтобы ждать скрипта до конца. Вот почему я подумал, что это может быть интересно сделать Crontab, который пишет вывод скрипта в файл, поэтому все, что мне нужно сделать, это CAT Этот файл, когда мне нужно знать информацию о нагрузке и MEM для 20 серверов. Однако, когда я кошачь этот файл во время выполнения Crontab, он даст мне неполную информацию. Это связано с тем, что вывод моего скрипта является написана линией по линии к файлу вместо всего сразу после завершения. Интересно, что нужно сделать, чтобы сделать эту работу ...

Мой Crontab:

 <код> * * * * * (date;~/bin/RUP_ssh) &> ~/bin/RUP.out   

Мой скрипт bash (rup_ssh):

 <код> for comp in `cat ~/bin/servers`; do     ssh $comp ~/bin/ca done   

Спасибо,

niefpaarschoenen

Английский оригинал

I wrote a script that gets load and mem information for a list of servers by ssh'ing to each server. However, since there are around 20 servers, it's not very efficient to wait for the script to end. That's why I thought it might be interesting to make a crontab that writes the output of the script to a file, so all I need to do is cat this file whenever I need to know load and mem information for the 20 servers. However, when I cat this file during the execution of the crontab it will give me incomplete information. That's because the output of my script is written line by line to the file instead of all at once at termination. I wonder what needs to be done to make this work...

My crontab:

* * * * * (date;~/bin/RUP_ssh) &> ~/bin/RUP.out 

My bash script (RUP_ssh):

for comp in `cat ~/bin/servers`; do     ssh $comp ~/bin/ca done 

Thanks,

niefpaarschoenen

</div
     
 
 

Список ответов

2
 
vote
vote
Лучший ответ
 

Вы можете буфет вывод во временный файл, а затем вывести все сразу, как это:

 <код> outputbuffer=`mktemp` # Create a new temporary file, usually in /tmp/ trap "rm '$outputbuffer'" EXIT # Remove the temporary file if we exit early. for comp in `cat ~/bin/servers`; do     ssh $comp ~/bin/ca >> "$outputbuffer" # gather info to buffer file done cat "$outputbuffer" # print buffer to stdout # rm "$outputbuffer" # delete temporary file, not necessary when using trap   
 

You can buffer the output to a temporary file and then output all at once like this:

outputbuffer=`mktemp` # Create a new temporary file, usually in /tmp/ trap "rm '$outputbuffer'" EXIT # Remove the temporary file if we exit early. for comp in `cat ~/bin/servers`; do     ssh $comp ~/bin/ca >> "$outputbuffer" # gather info to buffer file done cat "$outputbuffer" # print buffer to stdout # rm "$outputbuffer" # delete temporary file, not necessary when using trap 
</div
 
 
         
         
0
 
vote

Предполагая, что есть строка для определения того, какой хост данных MEM / BACK пришла от вас, может обновить ваш файл TXT, поскольку каждый результат приходит. Asuming Block Block - это одна строка, которую вы могли бы использовать

 <код> for comp in `cat ~/bin/servers`; do     output=$( ssh $comp ~/bin/ca )     # remove old mem/load data for $comp from RUP.out     sed -i '/'"$comp"'/d' RUP.out # this assumes that the string "$comp" is                                   # integrated into the output from ca, and                                   # not elsewhere     echo "$output" >> RUP.out done   

Это может быть адаптировано в зависимости от вывода CA. Есть много помощи на SED через сеть.

 

Assuming there is a string to identify which host the mem/load data has come from you can update your txt file as each result comes in. Asuming the data block is one line long you could use

for comp in `cat ~/bin/servers`; do     output=$( ssh $comp ~/bin/ca )     # remove old mem/load data for $comp from RUP.out     sed -i '/'"$comp"'/d' RUP.out # this assumes that the string "$comp" is                                   # integrated into the output from ca, and                                   # not elsewhere     echo "$output" >> RUP.out done 

This can be adapted depending on the output of ca. There is lots of help on sed across the net.

</div
 
 

Связанный проблема

10  Как я могу обнаружить доступ к файлу в Linux?  ( How can i detect file accesses in linux ) 
У меня есть куча потоков и приложений для обработки данных, которые я иногда нужно шпионить, то есть мне нужно знать, какие файлы они читают. Это в основном, ...

1  Linux: Команда для удаления строки (ы) из файла XML с соответствующей строкой, начиная с 2-го вхождения  ( Linux command to delete lines from xml file with matching string starting wit ) 
У меня есть файл XML, который выглядит что-то подобное: <код> <Header version= '1.0' timestamp='2017-01-04T07:10:07'> <Date>2017-04-18</Date> . . ...

8  Как отправить широковещательные пакеты через интерфейс specfic в Linux  ( How to send multicast packets via a specfic interface in linux ) 
<Р> Перепробовав все возможные способы, не мог найти работу вокруг этой проблемы. У меня есть машина с двумя интерфейсами eth0 и eth2. Я хочу, чтобы все ff38: ...

0  Как я могу надежно разрешить веб-пользователям создавать файлы?  ( How can i securely allow web users to create files ) 
Я строю веб-сайт, который позволяет определенным пользователям писать отзывы, и я хочу автоматически генерироваться небольшой PHP-файл, когда они делают. Како...

21  Не мог зарезервировать достаточно места для кучи объекта, чтобы начать JVM  ( Could not reserve enough space for object heap to start jvm ) 
Просто столкнулся со странной проблемой. Когда я набрал <код> java -version Я получил <код> Error occurred during initialization of VM Could not reser...

1  Есть ли способ выяснить макет аудиоканала в Linux?  ( Is there a method to figure out the audio channel layout in linux ) 
Я делаю игрока для Linux, и я хочу знать макет аудиоканала (стерео, 5,1, и т. Д.) системы пользователя (не каналы, включенные в медиафайл). На данный момент о...

25  Найти сломанные симличины с Python  ( Find broken symlinks with python ) 
Если я звоню <код> os.stat() на сломанный <код> 9988777663 , python бросает <код> OSError исключение. Это делает его полезным для их поиска. Тем не менее, е...

0  Отличитель B / W ls -la и ls -la> ls-1.txt  ( Difference b w ls la and ls la ls 1 txt ) 
Если я сделаю ls -la, я получаю такие результаты, как <код> total 16 drwxr-xr-x 4 rockse staff 136 Apr 28 16:55 . drwx------+ 23 rockse staff 782 Apr ...

0  Nginx Server не перезапускается  ( Nginx server not restarting ) 
Я использую эту это Изображение экземпляра из Google Рынок облачной платформы. Этот экземпляр из Jetware #jetware . Сервер настроен с балансировщиком н...

1  Почему мой код не может создавать простое устройство ввода с помощью UINPUT?  ( Why my code is not able to create simple input device using uinput ) 
Я пытаюсь научиться использовать / dev / uinput в Linux и скопировал простой код из kernel.org/doc/html/v4.12/input/uinput.html который ниже: <код> xmln...

0  Ошибка: аргумент типа "void (opca_hello ::) ()" не соответствует "void * (*) (void *)"  ( Error argument of type void opca hello does not match void void ) 
Я написал очень простой код для резьбы. Поскольку я очень новый для этого, я понятия не имею об ошибке. <код> class opca_hello { public: void hello(); } v...

9  «Бесшовные» Multi пользовательский сеанс в Linux / X11 [Закрыто]  ( Seamless multi user session in linux x11 ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыт. Этот вопрос Off-Topic . В настоящее время он не принимае...

1  Подключение к базе данных DB2 (DB2 / 400) работает на iSeries AS400 через Linux / OSX  ( Connecting to db2 db2 400 database running on an iseries as400 via linux osx ) 
Мое требование простое: у меня есть веб-приложение Rails, которое необходимо прочитать некоторые данные из DB2, работающих на iSeries AS400 . С помощью All...

-1  В чем разница между PS | WC и PS R | WC в Linux?  ( Whats the difference between ps wc and ps r wc in linux ) 
Я пытаюсь выяснить, в чем разница между <код> ps | wc и <код> ps r | wc ...

4  ARM Linux и Cross Toolchain Проблема  ( Arm linux and cross toolchain issue ) 
У меня есть проблема, вероятно, с моей рукой набора инструментов, но, возможно, есть что-то другое, что я делаю не так. У меня есть китайская доска DEV QQ244...

Связанный проблема

10  Как я могу обнаружить доступ к файлу в Linux? 
1  Linux: Команда для удаления строки (ы) из файла XML с соответствующей строкой, начиная с 2-го вхождения 
8  Как отправить широковещательные пакеты через интерфейс specfic в Linux 
0  Как я могу надежно разрешить веб-пользователям создавать файлы? 
21  Не мог зарезервировать достаточно места для кучи объекта, чтобы начать JVM 
1  Есть ли способ выяснить макет аудиоканала в Linux? 
25  Найти сломанные симличины с Python 
0  Отличитель B / W ls -la и ls -la> ls-1.txt 
0  Nginx Server не перезапускается 
1  Почему мой код не может создавать простое устройство ввода с помощью UINPUT? 
0  Ошибка: аргумент типа "void (opca_hello ::) ()" не соответствует "void * (*) (void *)" 
9  «Бесшовные» Multi пользовательский сеанс в Linux / X11 [Закрыто] 
1  Подключение к базе данных DB2 (DB2 / 400) работает на iSeries AS400 через Linux / OSX 
-1  В чем разница между PS | WC и PS R | WC в Linux? 
4  ARM Linux и Cross Toolchain Проблема