免费注册 查看新帖 |

Chinaunix

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

[系统管理] 如何实现:监控log,如果持续输出同样文本就重启该进程? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-06-21 08:31 |只看该作者 |倒序浏览
系统init用的是systemd,有个service运行过程在打开debug后某种情况下死锁了就持续输出"-------"的log,这时候需要重启该项服务。现在该如何实现这一功能,即监控该进程的log,如果持续5秒内输出的都是同样的字符串,就强制重启该项服务?

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
2 [报告]
发表于 2013-06-21 08:57 |只看该作者
本帖最后由 dn833 于 2013-06-21 16:43 编辑
  1. while :
  2. do
  3. ERR_NUM=$(tail -n5 logfile |grep -c "-------")
  4. if [ "$ERR_NUM" -eq 5 ] ; then
  5. service xxxxxx restart
  6. fi
  7. done
复制代码

论坛徽章:
1
射手座
日期:2014-03-10 14:24:52
3 [报告]
发表于 2013-06-21 15:16 |只看该作者
学习学习!

论坛徽章:
0
4 [报告]
发表于 2013-06-21 18:09 |只看该作者
本帖最后由 哈蜜瓜 于 2013-06-21 18:14 编辑

回复 2# dn833


    非常感谢你的脚本,虽然不能直接用,但告诉了我这种方式。我采用的init管理是systemd,systemd的日志管理工具journal非常强大。用journal配合你的思路,最后成功实践的脚本如下("-"符号需要转义):
  1. #!/bin/sh
  2. while :
  3.     do
  4.     ERR_NUM=$(journalctl --no-pager -n80 -u enigma2pc | grep -c "\-\-\-\-\-\-\-")
  5.     if [ "$ERR_NUM" -eq 80 ]; then
  6.        systemctl restart enigma2pc
  7.        sleep 10
  8.     fi      
  9. done
复制代码
再次感谢你的帮助!shell真是个好东西,systemd也是个好东西。呵呵

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
5 [报告]
发表于 2013-06-21 18:21 |只看该作者
没看出来journalctl这命令哪里体现出连续5条包含-------的意思。。。。

论坛徽章:
0
6 [报告]
发表于 2013-06-21 18:30 |只看该作者
本帖最后由 哈蜜瓜 于 2013-06-21 18:38 编辑

回复 5# dn833
  1. journalctl [OPTIONS...] [MATCHES...]

  2. Query the journal.

  3. Flags:
  4.      --since=DATE        Start showing entries newer or of the specified date
  5.      --until=DATE        Stop showing entries older or of the specified date
  6.   -c --cursor=CURSOR     Start showing entries from specified cursor
  7.   -b --this-boot         Show data only from current boot
  8.   -u --unit=UNIT         Show data only from the specified unit
  9.      --user-unit=UNIT    Show data only from the specified user session unit
  10.   -p --priority=RANGE    Show only messages within the specified priority range
  11.   -e --pager-end         Immediately jump to end of the journal in the pager
  12.   -f --follow            Follow journal
  13.   -n --lines[=INTEGER]   Number of journal entries to show
  14.      --no-tail           Show all lines, even in follow mode
  15.   -r --reverse           Show the newest entries first
  16.   -o --output=STRING     Change journal output mode (short, short-monotonic,
  17.                          verbose, export, json, json-pretty, json-sse, cat)
  18.   -x --catalog           Add message explanations where available
  19.      --full              Do not ellipsize fields
  20.   -a --all               Show all fields, including long and unprintable
  21.   -q --quiet             Don't show privilege warning
  22.      --no-pager          Do not pipe output into a pager
  23.   -m --merge             Show entries from all available journals
  24.   -D --directory=PATH    Show journal files from directory

  25. Commands:
  26.   -h --help              Show this help
  27.      --version           Show package version
  28.      --new-id128         Generate a new 128 Bit ID
  29.      --header            Show journal header information
  30.      --disk-usage        Show total disk usage
  31.   -F --field=FIELD       List all values a certain field takes
  32.      --list-catalog      Show message IDs of all entries in the message catalog
  33.      --dump-catalog      Show entries in the message catalog
  34.      --update-catalog    Update the message catalog database
复制代码
不是5行,是80行,这个log输出速度很快,80个采样更精确些。

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
7 [报告]
发表于 2013-06-21 19:20 |只看该作者
一口气看完了这篇文章
http://linuxtoy.org/archives/systemd-journal.html

多谢lz了,又开眼界了。。。。。。以前都不知道有systemd更不知道这玩意是用journal来处理日志的
现在明白journalctl --no-pager -n80 -u enigma2pc是什么意思了。如果log从来都不想实时被肉眼扫描比如手机、电视机顶盒之类的玩意,用这个比syslog强不少。

论坛徽章:
0
8 [报告]
发表于 2013-06-21 20:23 |只看该作者
回复 7# dn833


    将这个脚本作为systemd的unit对像来执行还是有些问题,在运行过一段时间后发现这个进程被自动关闭了。现在还没找出原因。只好找cron来完成这个任务了。

接触Linux有十几年了,在这期间断断续续都要玩弄一下Linux。不过我学东西比较被动,总是要在有需求的时候才去学。话说回来虽然效率低点但效果也还不错。这技术日新月异的更新,每次都感觉自己落伍了。呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP