我编写了一个脚本,该脚本通过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的输出进行调整。