免费注册 查看新帖 |

Chinaunix

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

[系统管理] 关于判断语句的实现问题 [复制链接]

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-07-29 06:20:00操作系统版块每日发帖之星
日期:2016-08-07 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-01-29 00:18 |只看该作者 |倒序浏览
本帖最后由 minirat 于 2014-01-29 00:22 编辑

#如题,有台linux的系统,计划crontab每15分钟检查一次远程服务器的3389端口是否开放。
#步骤1
#先判断远程服务器的3389是否开放
if [ 判断3389端口是否开放 ];then
    echo "port 3389 is ok" >> srv.log
else
    echo "port 3389 is down" >> srv.log
fi

#步骤2
if [ 判断是否发邮件,并且3389端口不通又发过邮件就不需要再发邮件,通了再发 ] ;
then
mail -s "3389 is down" 1234567890@qq.com < srv.log
fi

问题:
      每15分钟检查一次远程服务器的3389端口是否开放,不通了就发邮件通知,如果15分钟后或者3389端口一直没有开通就不要重复发邮件,或者一直等到3389通了再发邮件,这个判断语句怎样实现呢?谢了!

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
2 [报告]
发表于 2014-01-29 08:25 |只看该作者
你这是要黑别人的机器么?

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-07-29 06:20:00操作系统版块每日发帖之星
日期:2016-08-07 06:20:00
3 [报告]
发表于 2014-01-29 09:34 |只看该作者
本帖最后由 minirat 于 2014-01-29 09:36 编辑

这样就想黑别人机器也太低级了吧?,刚好说反了,是想保证机器服务正常运行了。

论坛徽章:
4
技术图书徽章
日期:2013-09-23 10:22:37狮子座
日期:2013-10-15 23:31:54卯兔
日期:2013-11-11 17:33:15金牛座
日期:2013-11-15 17:25:28
4 [报告]
发表于 2014-01-29 10:25 |只看该作者
本帖最后由 nbrr 于 2014-01-29 10:26 编辑
  1. #步骤1
  2. #先判断远程服务器的3389是否开放
  3. if [ 判断3389端口是否开放 ];then
  4.     echo "port 3389 is ok" >> srv.log
  5.     #如果发过down邮件,发送up邮件
  6.     [ -f /tmp/sent3389 ] && mail -s "3389 is up" 1234567890@qq.com < srv.log && rm -f /tmp/sent3389
  7. else
  8.     echo "port 3389 is down" >> srv.log
  9.     #如果没有发过邮件,发送邮件并创建 /tmp/sent3389
  10.     [ ! -f /tmp/sent3389 ] && mail -s "3389 is down" 1234567890@qq.com < srv.log && touch /tmp/sent3389
  11. fi
复制代码
其实你可以考虑用监控软件, nagios就不错

论坛徽章:
9
2015亚冠之阿尔纳斯尔
日期:2015-09-10 16:21:162015亚冠之塔什干火车头
日期:2015-07-01 16:23:022015年亚洲杯之巴勒斯坦
日期:2015-04-20 17:19:46子鼠
日期:2014-11-13 09:51:26未羊
日期:2014-08-28 18:13:36技术图书徽章
日期:2014-02-21 09:30:15酉鸡
日期:2014-01-14 11:12:49天蝎座
日期:2013-12-09 17:56:53平安夜徽章
日期:2015-12-26 00:06:30
5 [报告]
发表于 2014-01-29 10:27 |只看该作者
伪代码,供参考
  1. if [ 3389通 ];then
  2.     grep -q down status.log && mail
  3.     echo "up" >status.log
  4.     echo "port 3389 is ok" >> srv.log
  5. else
  6.     grep -q up status.log && mail
  7.     echo "down" >status.log
  8.     echo "port 3389 is down" >> srv.log
  9. fi
复制代码

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-07-29 06:20:00操作系统版块每日发帖之星
日期:2016-08-07 06:20:00
6 [报告]
发表于 2014-01-29 23:55 |只看该作者
本帖最后由 minirat 于 2014-01-29 23:57 编辑
nbrr 发表于 2014-01-29 10:25
其实你可以考虑用监控软件, nagios就不错


我想了很多条件假设就是没想到这个方法,也许我脑袋简单了 ,代码很有用,谢了! 另外nagios我在几台srv上安装调试过,有一定的用处,而且还有图形界面表示一些状态等信息,不过还是觉得自己动手写这些小脚本便于自己调试了,本身需要监控的信息也并不多,杀鸡焉用牛刀?:wink:

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-07-29 06:20:00操作系统版块每日发帖之星
日期:2016-08-07 06:20:00
7 [报告]
发表于 2014-01-30 00:01 |只看该作者
本帖最后由 minirat 于 2014-01-30 01:07 编辑
HH106 发表于 2014-01-29 10:27
伪代码,供参考


我grep --help查看了下-q参数是表示不输出普通的信息,grep -q down status.log 这个语句执行的结果是不是就是在status.log里面匹配down字符,然后没有任何信息输出了?

自问自答,刚看了下&&的解释:
1 命令之间使用 && 连接,实现逻辑与的功能。
2 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。
3 只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。

所以,这段代码和4楼的一个意思,似乎还简明些!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP