免费注册 查看新帖 |

Chinaunix

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

关于死循环的shell 跟crond [复制链接]

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-12 15:11 |只看该作者 |倒序浏览
  1. #!/bin/bash
  2. #
  3. #定义循环时间
  4. RUN_INTERVAL=5
  5. DATA_COUNT=500

  6. #定义预处理进程名
  7. PROCESS_NAME=data_prehandle_qeesoo

  8. #定义程序主目录
  9. HOME=/home/cn_qeesoo
  10. ERROR_LOG=${HOMELOG}/data_prehandle_qeesoo_error.log


  11. #定义数据库参数
  12. HOST=
  13. DBUSERNAME=
  14. DBPASSWORD=
  15. DATABASE=
  16. TABLE=

  17. function writeLog()
  18. {
  19.         str=$1;
  20.         echo "[`date '+%Y-%m-%d %H:%M:%S'`] $str"
  21. }

  22. echo  echo "-->>------------variable setting----------"
  23. echo  "-->>HOME=$HOME"
  24. echo  "-->>RUN_INTERVAL=$RUN_INTERVAL"
  25. echo  "-->>PROCESS_NAME=$PROCESS_NAME"
  26. echo  "-->>ERROR_LOG=$ERROR_LOGE"

  27. #检测数据库状态为0的数据
  28. while [ 1 -eq 1 ]
  29. do
  30. TEMP_COUNT=(`which mysql` -u  $DBUSERNAME -p$DBPASSWORD --database $DATABASE -e "select count(*) from $TABLE where state=0")
  31. if ["$TEMP_COUNT"  > "$DATA_COUNT" ]; then
  32.         writeLog "-->>Message receiver program state_data count < $DATA_COUNT"
  33.         writeLog "-->>next while do..."
  34.         sleep  $RUN_INTERVAL
  35.         continue
  36. fi


  37. #检测预处理进程并启用进程

  38. PID=`ps aux |grep $PROCESS_NAME |grep -v grep |awk '{print $2}'`

  39. if [ "$PID" = "" ];then
  40.         writeLog "-->>Message receiver program is running"
  41.         sleep  $RUN_INTERVAL
  42.         continue
  43. fi

  44. nohup $HOME/data_prehandle_qeesoo -f $HOME/qeesoo.conf >>${ERROR_LOG} 2>&1 &
  45. writeLog  "-->>Start the process data_prehandle_qeesoo"
  46. sleep  $RUN_INTERVAL

  47. done
复制代码


小弟写了个shell,目的是这样的,这个shell一直运行,然后按设定的时间去取一些数据,然后进行一些相应的操作。现在是用死循环的方式进行的。

请问用这个方式有什么不好的地方比起crond?比如内存释放等?谢谢

[ 本帖最后由 枫影谁用了 于 2008-6-12 16:23 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-06-12 15:31 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
3 [报告]
发表于 2008-06-12 15:46 |只看该作者
crond是内制的服务, 效率上看要比编写脚本用sleep高! 个人看法

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
4 [报告]
发表于 2008-06-12 16:55 |只看该作者
原帖由 寂寞烈火 于 2008-6-12 15:46 发表
crond是内制的服务, 效率上看要比编写脚本用sleep高! 个人看法


哦。THS

那请问在内存释放方面呢?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2008-06-12 17:00 |只看该作者
原帖由 枫影谁用了 于 2008-6-12 16:55 发表


哦。THS

那请问在内存释放方面呢?

应该没多少差别。不过还是推荐用cron。

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
6 [报告]
发表于 2008-06-12 17:46 |只看该作者
原帖由 woodie 于 2008-6-12 17:00 发表

应该没多少差别。不过还是推荐用cron。


明白。

谢谢。其实是有用到cron的,不过cron是检测这个死循环的shell,如果死循环的shell异常,就重新启动起来或是做一些处理。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
7 [报告]
发表于 2008-06-12 17:54 |只看该作者

回复 #6 枫影谁用了 的帖子

听 woodie 的, 没错!

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
8 [报告]
发表于 2008-06-12 18:18 |只看该作者
呵呵,系统的功能应该好好利用啊。不过cron的任务好像只到分钟级,如果要作秒级甚至亚秒级的控制就无能为力了。
另外,内存泄漏的问题对于一个长时间运行的二进制程序是必须小心的,但楼主的情况显然不是这样。

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
9 [报告]
发表于 2008-06-12 19:05 |只看该作者
原帖由 woodie 于 2008-6-12 18:18 发表
呵呵,系统的功能应该好好利用啊。不过cron的任务好像只到分钟级,如果要作秒级甚至亚秒级的控制就无能为力了。
另外,内存泄漏的问题对于一个长时间运行的二进制程序是必须小心的,但楼主的情况显然不是这样。


明白了,谢谢。

决定使用shell来做。cron是负责定时检测这个shell的情况然后做相应的处理。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP