免费注册 查看新帖 |

Chinaunix

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

[文本处理] shell 如何计数 然后不去请求接口了? [复制链接]

论坛徽章:
8
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015小元宵徽章
日期:2015-03-06 15:58:18每日论坛发贴之星
日期:2015-06-08 22:20:00每日论坛发贴之星
日期:2015-06-08 22:20:00操作系统版块每日发帖之星
日期:2015-06-14 22:20:00数据库技术版块每日发帖之星
日期:2015-11-09 06:20:00数据库技术版块每日发帖之星
日期:2016-02-22 06:20:0015-16赛季CBA联赛之上海
日期:2017-01-01 23:58:53
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2018-03-27 16:36 |只看该作者 |倒序浏览
本帖最后由 zl624867243 于 2018-03-29 16:49 编辑

先贴代码:mon_all_process.sh 如下:


复制代码
  1. #!/bin/bash
  2. #function: 遍历文本内容 监控进程是否存在

  3. cat ./process_all/process_*.txt |while read -r line
  4. do
  5.         name=$(echo $line)
  6.         #echo $name
  7.         #ps -ef |grep $name
  8.         processnum=$(ps -ef | grep "$line" |grep -v grep|grep -v mon_all_process.sh| wc -l)

  9.         if [ $processnum -lt 1 ];then
  10.                 echo "$line have down,then request interface......."
  11.                 curl "http://xxyy.com/index.php?_&_a=monitoringEmail&only_string=$line"
  12.         else
  13.                 :
  14.         fi

  15. done
复制代码




process_a.txt 的代码如下:

  1. a.jar
  2. b.jar
  3. c.jar
  4. .....
复制代码
process_b.txt 类似process_c.txt 类似
......


这个脚本用crontab 2分钟执行一次,检测txt里的进程,是否存在(txt里的进程可能有上百上千个),如果不存在 带参数 请求开发的接口,开发那边就用php触发邮件。
现在问题来了,我每两分钟遍历一次 进程挂了就请求接口,如果进程几个小时还没起来,那岂不是要发很多个右键,而且频繁请求接口 接口压力大。开发的意思是 :
如果进程挂了第一次是要请求接口的 第二次就不要去请求接口了。并且如果进程恢复了还要继续监控进程。我说 shell又不是类似于java 的那种 是app server 能持续去监听 并且计数。这个不好搞,要他们php去处理计数,开发那边又说挂了就不要去请求接口了 接口压力大。

各位坛友有什么叫的建议 不?或者shell或者python能否实现?




论坛徽章:
0
2 [报告]
发表于 2018-03-27 17:56 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
3 [报告]
发表于 2018-03-27 18:29 |只看该作者
本帖最后由 wh7211 于 2018-03-29 19:01 编辑

回复 1# zl624867243

如果进程挂了第一次是要请求接口的 第二次就不要去请求接口了。并且如果进程恢复了还要继续监控进程。我说 shell又不是类似于java 的那种 是app server 能持续去监听 并且计数。这个不好搞,要他们php去处理计数,开发那边又说挂了就不要去请求接口了 接口压力大。
  1. 在“process_a.txt”中增加1列开关如下,初始值为on:
  2. a.jar on
  3. b.jar on
  4. c.jar on
  5. .....

  6. 检测判断条件如下:
  7. if [[ 进程存在 ]];then
  8.     开关==on
  9. else
  10.     if [[ 开关==on ]];then
  11.         开关==off
  12.         请求接口
  13.     fi
  14. fi
复制代码

        

论坛徽章:
8
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015小元宵徽章
日期:2015-03-06 15:58:18每日论坛发贴之星
日期:2015-06-08 22:20:00每日论坛发贴之星
日期:2015-06-08 22:20:00操作系统版块每日发帖之星
日期:2015-06-14 22:20:00数据库技术版块每日发帖之星
日期:2015-11-09 06:20:00数据库技术版块每日发帖之星
日期:2016-02-22 06:20:0015-16赛季CBA联赛之上海
日期:2017-01-01 23:58:53
4 [报告]
发表于 2018-03-29 16:14 |只看该作者
回复 2# 本友会机友会摄友会

都是linux主机没有powershell。你这答了像没答一样

论坛徽章:
8
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015小元宵徽章
日期:2015-03-06 15:58:18每日论坛发贴之星
日期:2015-06-08 22:20:00每日论坛发贴之星
日期:2015-06-08 22:20:00操作系统版块每日发帖之星
日期:2015-06-14 22:20:00数据库技术版块每日发帖之星
日期:2015-11-09 06:20:00数据库技术版块每日发帖之星
日期:2016-02-22 06:20:0015-16赛季CBA联赛之上海
日期:2017-01-01 23:58:53
5 [报告]
发表于 2018-03-29 16:47 |只看该作者
回复 3# wh7211

你再看下原题目 我读的是多个 文件 ,
  1. cat ./process_all/process_*.txt |while read -r line
复制代码


你这个脚本如何更改不同文件里的 开关状态了?

论坛徽章:
0
6 [报告]
发表于 2018-03-29 17:37 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
7 [报告]
发表于 2018-03-29 18:20 |只看该作者
本帖最后由 wh7211 于 2018-03-29 19:05 编辑

回复 5# zl624867243


  1. #!/bin/bash
  2. files=`ls ./process_all/process_*.txt`
  3. for file in ${files}
  4. do
  5.     echo "<<<${file}"
  6.     while read line
  7.     do
  8.         if [[ 进程存在 ]];then
  9.             开关==on
  10.         else
  11.             if [[ 开关==on ]];then
  12.                 开关==off
  13.                 请求接口
  14.             fi  
  15.         fi  
  16.     done< ${file}
  17. done
复制代码

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
8 [报告]
发表于 2018-04-02 18:49 |只看该作者
  1. #!/bin/bash

  2. if [ -z $1 ];then
  3.         echo "Usage: `basename $0` PROCESS_NAME"
  4.         exit 1
  5. fi

  6. PROCESS_NAME=$1
  7. RECORD_FILE=/tmp/record.lock

  8. PROCESS_NUM=$(ps -ef | grep $PROCESS_NAME | grep -iv grep| wc -l)

  9. if [ $PROCESS_NUM = 0  ] && [ ! -f $RECORD_FILE ];then
  10.         调用API
  11.         touch $RECORD_FILE
  12. elif [ $PROCESS_NUM = 1 ];then
  13.         rm -f $RECORD_FILE
  14. fi

  15. exit 0
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP