shell timeout

写脚本的时候,经常需要用到超时控制。看《shell专家编程》时看到一个好例:修改了一下,

1.超过timeout时间还没执行完,则kill进程,发邮件告警:

set-x
mailSend()
{
       
mailContent="xxxx Web
response time over 5 seconds"
        echo $mailContent
| mail -s "xxxxxx
Web TimeOut"[email protected].cion
}
timeout()
{
        waitfor=3
        command=$*
        $command
&
       
commandpid=$!

( sleep $waitfor
; kill -9
$commandpid  >/dev/null2>&1&&
mailSend )&

watchdog=$!
       
sleeppid=$PPID
        wait $commandpid
>/dev/null2>&1

kill
$sleeppid >/dev/null2>&1
}

#测试的函数

test123()
{
        sleep 20
}

timeout test123

2.超过timeout时间还没执行完,只发邮件告警,程序正常执行:

mailSend()
{
       
mailContent="xxxxe Web
response time over 5 seconds,Please have a check !"
       
echo $mailContent | mail
-s "xxxxx
WEB response time over 5 senconds"
$mailTo
}
timeout()
{
        waitfor=6
        command=$*
        $command
&
       
commandpid=$!

( sleep $waitfor
;  mailSend
)&

watchdog=$!
       
sleeppid=$PPID
        wait $commandpid
>/dev/null2>&1
       
kill  -9 $watchdog >/dev/null2>&1
       
kill $sleeppid >/dev/null2>&1
}

shell timeout,布布扣,bubuko.com

时间: 2024-10-05 23:46:31

shell timeout的相关文章

Python的并发并行[3] -> 进程 -> subprocess 模块

subprocess 模块 0 模块描述 / Module Description From subprocess module: """Subprocesses with accessible I/O streams This module allows you to spawn processes, connect to their input/output/error pipes, and obtain their return codes. For a complet

python 中的queue, deque

创建双向队列 import collections d = collections.deque() append(往右边添加一个元素) import collections d = collections.deque() d.append(1) d.append(2) print(d) #输出:deque([1, 2]) appendleft(往左边添加一个元素) import collections d = collections.deque() d.append(1) d.appendlef

解决zabbix“ZBX_NOTSUPPORTED: Timeout while executing a shell script”报错

如题所示,在zabbix_server使用zabbix_get获取自定义"UserParameter"对应的脚本的数据时,出现了如题所示的报错信息 [[email protected] scripts]# /usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -k 8080connectNum ZBX_NOTSUPPORTED: Timeout while executing a shell script. 解决方案 (1)修改zabbix_ser

shell脚本for循环

Shell循环:for 循环次数是固定的 ===================== Shell: for  变量名  [in  取值列表] do 循环体 done C语言: for((初值;条件;步长)) do 循环体 done ===================== Shell循环:while  until 循环次数不一定是固定的 可以固定 可以不固定 while语句: while  条件测试 do 循环体 done 功能:当条件测试成立(条件测试为真),执行循环体. =========

shell脚本交互:expect学习笔记及实例详解

最近项目需求,需要写一些shell脚本交互,管道不够用时,expect可以很好的实现脚本之间交互,搜索资料,发现网上好多文章都是转载的,觉得这篇文章还不错,所以简单修改之后拿过来和大家分享一下~ 1. expect是spawn: 后面加上需要执行的shell命令,比如说spawn sudo touch testfile 1.3 expect: 只有spawn执行的命令结果才会被expect捕捉到,因为spawn会启动一个进程,只有这个进程的相关信息才会被捕捉到,主要包括:标准输入的提示信息,Li

老男孩新书Shell编程实战预定开始了-包邮包答疑

老男孩新书Shell编程实战预定开始了(扫图中二维码购买包邮定期包答疑),亲爱的伙伴们,让你们久等了.电脑用户猛戳 电脑购买链接 注意:包邮包3个月(2017春节后起算)Q群书籍内容答疑,等于白送书,还倒搭答疑服务. 如果觉得给力,请帮忙朋友圈.QQ群.空间转载! 活动优惠仅限本次活动,从其他渠道购买不享受此次的服务承诺. 定价 89元 基本信息 作者: 老男孩 丛书名: Linux/Unix技术丛书 出版社: 机械工业出版社 ISBN:9787111556077 上架时间:2017-1-6 出

批量执行shell命令

虽然目前都实现了自动化如puppet saltstack在环境中的应用,但工作中不可避免的要自己写一些简单的批量执行shell命令的脚本. python paramiko模块是目前使用得较为顺手的模块,执行命令时基本无需要转换,直接将shell命令扔进去执行就OK 简单示例,10个线程同时执行ssh或scp动作,未设置timeout时间,如执行长时间无反应会导致脚本执行问题: #!/usr/bin/python # _*_ coding: utf-8 _*_ import paramiko im

自动化运维—tomcat服务起停(mysql+shell+django+bootstrap+jquery)

项目简介: 项目介绍:自动化运维是未来的趋势,最近学了不少东西,正好通过这个小项目把这些学的东西串起来,练练手. 基础架构: 服务器端:web框架-Django 前端:html css jQuery bootstrap 脚本:shell 适用系统:redhat5.8/redhat6.6 平台已实现功能: 中间件和数据库软件的启停和状态检查 (tomcat,nginx,apache,oracle,mysql) 完整功能设计图: 效果图: 架构图(简要): 项目源码:https://github.c

Shell 标准输入、输出和错误

防伪码:桃花潭水深千尺,不及汪伦送我情. 文件描述符(fd):文件描述符是一个非负整数,在打开现存文件或新建文件时,内核会返回一个 文件描述符,读写文件也需要使用文件描述符来访问文件. 内核为每个进程维护该进程打开的文件记录表.文件描述符只适于 Unix.Linux 操作系统. 8. 1  标准输入.输出和错误 文件描述符  描述  映射关系 0  标准输入,键盘  /dev/stdin -> /proc/self/fd/0 1  标准输出,屏幕  /dev/stdout -> /proc/s