0

我正在编写不同服务器上的监控脚本。

我的要求是每 30 分钟从两台服务器收集一次日期,合并数据并通过邮件发送。

现在,我卡住的地方是将数据获取到 csv 文件时,我需要添加我无法执行的列标题。

srv1 上的代码片段

#!/bin/bash 

EAI=`netstat | grep 16001 | wc -l` 
Date=`date` 
DM=`psme | grep -i DM_EAI | wc -l`        

while true; do
     echo $Date $EAI
     sleep 1800 done  > eai_js_srv1.csv   
while true; do
     echo $Date $DM
     sleep 1800 done  > dm_eai_srv1.csv

srv2 上的代码片段

#!/bin/bash  
EAI=`netstat | grep 16001 | wc -l`  
Date=`date`  
DM=`psme | grep -i DM_EAI | wc -l`   

while true; 
    do echo $Date $DM sleep 1800 
done > eai_js_srv2.csv   

while true; 
    do echo $Date $EAI sleep 1800 
done > dm_eai_srv2.csv

在此之后,我组合了来自 2 个服务器的文件,如下所示:

join -a1 -a2 eai_js_srv1.csv eai_js_srv2.csv > eai_js_counts.csv  
join -a1 -a2 dm_eai_srv1.csv dm_eai_srv2.csv > dm_eai_counts.csv

由于我使用 while 循环,所以数据将每 30 分钟附加到同一个文件,所以现在我需要所需的输出为:

eai_js_counts.csv:

Timestamp                           BRM Servers 
                                    611       610   
1/28/2013 02:00 AM PST              176       99   
1/28/2013 06:00 AM PST              150       115

dm_eai_counts.csv:

Timestamp                           BRM Servers 
                                    611       610  
1/28/2013 02:00 AM PST              4         5  
1/28/2013 06:00 AM PST              4         5
4

1 回答 1

0
#!/bin/bash  

F=eai_js_srv2.csv
D=dm_eai_srv2.csv
cat > $F << EOF # Write a header to the file $F
Timestamp                           BRM Servers 
                                    611       610
EOF

cat > $D << EOF # Write a header to the file $D
Timestamp                           BRM Servers 
                                    611       610
EOF

# Write data every 1800 seconds.  
while sleep 1800; do
    exec >> $F  # Direct output to file $F
    date | tr '\n' ' '
    netstat | grep 16001 | wc -l
    exec >> $D # Direct output to $D
    date | tr '\n' ' '  
    psme | grep -i DM_EAI | wc -l
done 
于 2013-02-01T16:08:08.280 回答