免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2297 | 回复: 6
打印 上一主题 下一主题

linux shell编程求解,我只有一点思路 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-19 23:57 |只看该作者 |倒序浏览
10可用积分
原文:
编写 systemonitor.sh 程序,要求包括以下功能:
   1. 后台运行 ping localhost > datfile.dat 命令监视网络的联通情况,将结果保存到 datfile.dat 文件中;
   
   2. 监视 datfile.dat 文件,当它大于 100KB 时,将其按"datfile_开始时间_结束时间.dat"形式在当前目录重命名;
  
   3. 当所有被重命名后的.dat文件大小之和大于1MB字节时,将这些.dat文件打包压缩成.tar.gz格式,存放到当前目录下的archive子目录(命名形式:datfile_第一个dat文件的

开始时间_最后一个dat文件的结束时间.tar.gz),之后删除所有被打包的.dat文件(即打包后删除原文件);
   
   4. 完成上述任务后,结束所有由 systemonitor.sh 启动的进程;

   5.实现systemonitor.sh随系统启动而运行

我的思路
1.先写一个shell脚本,将ping的结果存进datfile.dat中

2,再分析这个脚本的大小,做后续操作

请教各位,谁有方法实这个shell
我认为第2点和第3点不好做,我刚接触shell编程

#/usr/bin/sh
#grad /etc/hosts and ping each address
cat /etc/hosts|grep -v '^#' | while read LINE
do
  ADDR=`echo $LINE|awk '{print $1}'`
  for MACHINE in $ADDR
  do
    ping $MACHINE > datfile.dat
  done
done

ls -l datfile.dat|grep >ds.txt
awk '$5/1000<100 {print $5}' ds.txt
这样能输出datfile的大小

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
2 [报告]
发表于 2009-02-20 00:29 |只看该作者
这完全做不到系统监控...

论坛徽章:
0
3 [报告]
发表于 2009-02-20 05:07 |只看该作者
献丑了...

#!/bin/bash

#定义初始时间
date_dat=`date +%Y%m%d%H%M%S`
date_tar=`date +%Y%m%d%H%M%S
`

#如果archive文件夹不存在,则创建archive文件夹
[[ -d ./archive ]] || mkdir archive

#测试dat文件大小并重命名。如果发生重命名,刷新dat文件初始时间,并返回0
file_size_test ()
{
if [[ `ls -l datfile.dat |awk '{print $5}'` -ge 102400 ]]
then
        mv datfile.dat datefile_"$date_dat"_`date +%Y%m%d%H%M%S`.dat
        date_dat=`date +%Y%m%d%H%M%S`
        return 0
fi
return 1

}

#测试dat文件大小的总和并打包,如发生打包,刷新打包初始时间
all_size_test ()
{
if [[ `ls -l *.dat | awk '{size+=$5}  END{print size}'` -ge 1024000 ]]
then
        tar czf archive/datfile_"$date_tar"_`date +%Y%m%d%H%M%S`.tar.gz *.dat
        date_tar=`date +%Y%m%d%H%M%S`
        rm -rf *.dat
fi
}



while [ 0 ]
do
        ping -c 1 localhost >> datfile.dat

        file_size_test

#如果文件大小测试返回值为0,则检测所有dat文件大小,非0不检测
        [[ $? == 0 ]] && all_size_test
done

exit 0


[ 本帖最后由 Celinde 于 2009-2-20 05:12 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2009-02-20 08:21 |只看该作者
ping 监控主机确实效果不好。

论坛徽章:
0
5 [报告]
发表于 2009-02-20 09:12 |只看该作者
原帖由 liqxy 于 2009-2-20 08:21 发表
ping 监控主机确实效果不好。

嗯,因为很多情况下为了安全一般都禁ping了

论坛徽章:
0
6 [报告]
发表于 2009-02-21 09:13 |只看该作者
原帖由 xuxingyu 于 2009-2-20 09:12 发表

嗯,因为很多情况下为了安全一般都禁ping了


这倒不一定,如果需要的话可以采用允许来自某一个IP的ping。但是效果怎么样就不敢说了。

论坛徽章:
0
7 [报告]
发表于 2009-02-22 12:26 |只看该作者
首先感谢3楼楼主,我按照您的指点编写了脚本,运行时屏幕上不停的输出
./systemonitor.sh: line 3: date_dat: command not found
./systemonitor.sh: line 4: date_tar: command not found
./systemonitor.sh: line 14: date_dat: command not found
......

不知道是什么原因

二、文件超过100k时,重合名的文件名不是按"datfile_开始时间_结束时间.dat"形式
    而是按"datfile_开始时间.dat"形式
   
     3. 当所有被重命名后的.dat文件大小之和大于1MB字节时,将这些.dat文件打包压缩成.tar.gz格式,存放到当前目录下的archive子目录(命名形式:datfile_第一个dat文件的

开始时间_最后一个dat文件的结束时间.tar.gz),
   
    运行命令,结果在archive子目录下有很多的tar.gz文件,题的意思应该是只有一个压缩文件,里同包含了名称为---“datfile_开始时间_结束时间.dat"的所有.dat文件


还望指教,期等中。。。。

systemonitor.rar

468 Bytes, 下载次数: 58

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP