免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 32437 | 回复: 67

[学习共享] shell并发脚本,很实用 [复制链接]

论坛徽章:
0
发表于 2008-10-29 21:09 |显示全部楼层
ptest.sh
  1. #!/usr/bin/ksh
  2. # SCRIPT: ptest.sh
  3. # AUTHOR: Ray001
  4. # DATE: 2008/10/03
  5. # REV: 2.0
  6. # For STUDY
  7. #
  8. # PURPOSE:
  9. # 实现进程并发,提高执行效率,同时能记录每个执行失败的子进程信息


  10. #定义并发进程数量
  11. PARALLEL=3
  12. #定义临时管道文件名
  13. TMPFILE=$$.fifo
  14. #定义导出配置文件全路径名
  15. CMD_CFG=$HOME/cfg/ptest.cfg
  16. #定义失败标识文件
  17. FAILURE_FLAG=failure.log


  18. ####################### 函数定义 ########################
  19. # 中断时kill子进程
  20. function trap_exit
  21. {
  22. kill -9 0
  23. }


  24. # 通用执行函数
  25. exec_cmd()
  26. {
  27.     # 此处为实际需要执行的命令,本例中用sleep做示例
  28.         sleep ${1}
  29.     if [ $? -ne 0 ]
  30.     then
  31.         echo "命令执行失败"
  32.         return 1
  33.     fi
  34. }


  35. trap 'trap_exit; exit 2' 1 2 3 15

  36. #清理失败标识文件
  37. rm -f  ${FAILURE_FLAG}

  38. #为并发进程创建相应个数的占位
  39. mkfifo $TMPFILE
  40. exec 4<>$TMPFILE
  41. rm -f $TMPFILE
  42. {
  43.         count=$PARALLEL
  44.         while [ $count -gt 0 ]
  45.         do
  46.                 echo
  47.                 let count=$count-1
  48.         done
  49. } >&4

  50. #从任务列表 seq 中按次序获取每一个任务
  51. while read SEC
  52. do
  53.         read <&4
  54.         (  exec_cmd ${SEC} || echo ${SEC}>>${FAILURE_FLAG} ; echo >&4 ) &
  55. done<$CMD_CFG
  56. wait
  57. exec 4>&-

  58. #并发进程结束后判断是否全部成功
  59. if [ -f ${FAILURE_FLAG} ]
  60. then
  61.         exit 1
  62. else
  63.         exit 0
  64. fi

复制代码


ptest.cfg
  1. 10
  2. 20
  3. 30
  4. 6
  5. 18
  6. 35
  7. 23
复制代码

论坛徽章:
0
发表于 2008-10-29 21:13 |显示全部楼层
sf

论坛徽章:
0
发表于 2008-10-30 10:45 |显示全部楼层
mark
学习

论坛徽章:
0
发表于 2008-10-30 11:09 |显示全部楼层
顶,好东西。。。

论坛徽章:
0
发表于 2008-10-30 12:03 |显示全部楼层
MARK...
UP...
STUDY...

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
发表于 2008-10-30 12:21 |显示全部楼层
嗯。不错。。

论坛徽章:
0
发表于 2008-10-30 12:25 |显示全部楼层
看到了kill -9 0

论坛徽章:
0
发表于 2008-10-30 15:16 |显示全部楼层
ksh?

论坛徽章:
0
发表于 2008-10-30 15:36 |显示全部楼层
trap 'trap_exit; exit 2' 1 2 3 15



LZ,这个1 2 3 15都代表什么?为什么是1 2 3 15而不是其他的数字呢?

论坛徽章:
0
发表于 2008-11-05 18:53 |显示全部楼层
原帖由 ETKH 于 2008-10-30 15:36 发表
trap 'trap_exit; exit 2' 1 2 3 15



LZ,这个1 2 3 15都代表什么?为什么是1 2 3 15而不是其他的数字呢?

是信号的值,在linux下使用kill -l 可以列出。
/home/ray001 >kill -l
1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
5) SIGTRAP      6) SIGABRT      7) SIGEMT       SIGFPE
9) SIGKILL     10) SIGBUS      11) SIGSEGV     12) SIGSYS
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGURG
17) SIGSTOP     1 SIGTSTP     19) SIGCONT     20) SIGCHLD
21) SIGTTIN     22) SIGTTOU     23) SIGIO       24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     2 SIGWINCH
29) SIGLOST     30) SIGUSR1     31) SIGUSR2     32) SIGRTMAX
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2021中国系统架构师大会

【数字转型 架构重塑】2021年5月20日-22日第十三届中国系统架构师大会将在云端进行网络直播。

大会为期3天的议程,涉及20+专场,近120个主题,完整迁移到线上进行网络直播对会议组织来说绝非易事;但考虑到云端会议的直播形式可以实现全国各地技术爱好者的参与,也使ITPUB作为技术共享交流平台得到更好的普及,我们决定迎难而上。
http://sacc.it168.com/


大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP