立刻一次而不是按线说

  • 本文关键字:一次 linux bash
  • 更新时间 :
  • 英文 :


我编写了一个脚本,该脚本通过sshing of sshing of to每家服务器获取服务器列表的负载和MEM信息。但是,由于大约有20台服务器,因此等待脚本结束不是很有效。这就是为什么我认为制作一个将脚本输出写入文件的crontab可能会很有趣的原因,所以每当我需要知道20个服务器的负载和MEM信息时,我需要做的就是猫。但是,当我在执行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

您可以将输出缓冲到临时文件,然后一次输出:

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

假设有一个字符串可以识别哪个主机/负载数据来自您可以在每个结果中更新您的txt文件。在每个结果中。使用

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上有很多帮助。

相关内容

  • 没有找到相关文章

最新更新