#!/bin/sh

ret_ok=
ret_warn=
ret_critical=
ret_unknown= info_count=`ps -aux | awk 'BEGIN {cnt=0} /[^-c] dotnet GameServer.dll/{++cnt} END {print cnt}'`
process_count=$((${info_count}-))
if [[ ${process_count} < ]]; then
echo ${ret_critical}
else
echo ${ret_ok}
fi

这里还有一个带参数的以供参考

#!/bin/bash
#port on each server
port=$ #result code ret_ok=
ret_warn=
ret_critical=
ret_unknown= #get heartbeat message
#url:http://127.0.0.1:9002/heartbeat
curl_result=`curl -m -s http://127.0.0.1:$port/heartbeat` if [[ ${curl_result} == *"alive"* ]]; then
echo ${ret_ok}
else
echo ${ret_critical}

ps -aux查出来进程,用awk正则匹配,然后输出匹配行数,减去awk本身,其中进程名那里可以使用变量,这里图省事就写死了,反正以后可以再改

然后再在zabbix中添加

[root@zabbiclient1 zabbix_agentd.conf.d]# pwd
/usr/local/zabbix/etc/zabbix_agentd.conf.d
[root@zabbiclient1 zabbix_agentd.conf.d]# ll check_process.conf
-rw-r--r-- root root Dec check_process.conf
[root@zabbiclient1 zabbix_agentd.conf.d]# cat check_process.conf
UserParameter=check.dotnet,/etc/zabbix/scripts/check_dotnet_running ##注意check.crontab必须和下面创建item时的key相对应

如果是带参数的,就在逗号后边的command后边加上[]中间括着参数,比如

UserParameter=check.dotnet[*],/etc/zabbix/scripts/check_dotnet_running $

在zabbix client机器上include 相关文件,

[root@zabbiclient1 etc]# pwd
/usr/local/zabbix/etc
[root@zabbiclient1 etc]# ls
zabbix_agent.conf zabbix_agent.conf.d zabbix_agentd.conf zabbix_agentd.conf.d
[root@zabbiclient1 etc]# cat zabbix_agentd.conf | grep -v "#" | grep -v "^$"
PidFile=/tmp/zabbix_agentd.pid
LogFile=/tmp/zabbix_agentd.log
DebugLevel=
Server=192.168.10.134
ServerActive=192.168.10.134
Hostname=zabbixclient1
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/check_process.conf ###Include该文件!

3: 下面关键的重点是通过zabbix_get 获取check.dotnetkey的值,这个值在创建trigger时时需要,否则
trigger表达式填写不正确,就无法触发trigger
当我将crond进程在134机器上stop掉的时候,在133机器上获取值
[root@zabbiclient2 ~]# /usr/local/zabbix/bin/zabbix_get -s  192.168.10.134   -k check.dotnet
3

如果是有参数的,就是这样测试/usr/local/zabbix/bin/zabbix_get -s  192.168.10.134   -k check.dotnet[5],并在创建模板的时候在key中加入中括号加入参数

下面就创建一个模板,我创建的模板名为apptemplate,在模板里面创建一个item,crond is running,update interval 我设置为30s,见

然后创建一个trigger,trigger名为:dotnet does not work, 表达式值为{apptemplate:check.crontab.last(0)}=3
Severity 选择disaster,点save按钮即可创建。见附件

4:然后就可以在134机器上手动执行service dotnet stop,看看是否触发trigger,当然生产系统我就不完活了,你们自己慢慢玩吧

或另外一种方式:

Zabbix监控一个服务是否存在

有两种方法:

1:数进程数

接着创建trigger:

还有一种情况,例如:iptables,尽管它启动了,但不能通过ps –ef  | grep iptables 来数进程数,这个时候就需要另外一种访问来处理了,见附件:

接着创建trigger,如下:

zabbix中监控某个进程的shell脚本的更多相关文章

  1. tomcat监控,自动重启shell脚本

    tomcat监控,自动重启shell脚本如下,取名 monitor_tomcat.sh: #!/bin/sh # func:自动监控tomcat脚本并且执行重启操作 # 获取tomcat进程ID(其中 ...

  2. 用于检测进程的shell脚本

    用于检测进程的shell脚本 2010-07-07 10:38:08|  分类: Centos |字号 订阅 脚本一: #!/bin/sh program=XXXX     #进程名 sn=`ps - ...

  3. Shell中要如何调用别的shell脚本,或别的脚本中的变量,函数

    在Shell中要如何调用别的shell脚本,或别的脚本中的变量,函数呢? 方法一:   . ./subscript.sh 方法二:   source ./subscript.sh 注意: 1.两个点之 ...

  4. 监控Nginx服务的Shell脚本

    Nginx 虽然处理并发量比 apache 确实要强点,但它这种 php-cgi 模式不是太稳定,这点网上也有朋友总结了,我在实现项目中也感受到了. 我们一台支付机,偶尔会出现以下情况的:php-cg ...

  5. 如何在java程序中调用linux命令或者shell脚本

    转自:http://blog.sina.com.cn/s/blog_6433391301019bpn.html 在java程序中如何调用linux的命令?如何调用shell脚本呢? 这里不得不提到ja ...

  6. 找出1小时内占用cpu最多的10个进程的shell脚本

    cpu时间是一项重要的资源,有时,我们需要跟踪某个时间内占用cpu周期最多的进程.在普通的桌面系统或膝上系统中,cpu处于高负荷状态也许不会引发什么问题.但对于需要处理大量请求的服务器来讲,cpu是极 ...

  7. zabbix 中监控windows 的typepref中的值

    监控项:typepref -qx在zabbix中实现: 1.测试zabbix-get 获取数据: /usr/local/zabbix/bin/zabbix_get -s 192.168.1.3 -p1 ...

  8. 用于检测进程的shell脚本代码小结

    本文介绍一段shell脚本,它可以检测某进程或某服务是否正在运行,然后以邮件通知.有需要的朋友参考下 一个简单的shell脚本,用来找出关键的服务是否正在运行,适用于Linux操作系统或Unix操作系 ...

  9. 监控hadoop任务结果shell脚本

    需求:每日hadoop结果文件中,找出数据不完整的日期和没有跑出数据的日期,重新进行跑hadoop任务 分析:在result/目录生成的文件中数据有2个特点 第一:日期有,但是数据不完整 第二:日期对 ...

随机推荐

  1. mysql 之 group by 性能优化 查询与统计分离

    背景介绍 记录共128W条!   SELECT cpe_id, COUNT(*) restarts FROM business_log WHERE operate_time>='2012-12- ...

  2. nodejs 环境搭建

    一 下载nodejs 官网:http://nodejs.cn/ 有时官网有点慢,可以去其他地方下载 统一下载站:http://www.3987.com/xiazai/2/43/57188.html 二 ...

  3. OneThink后台模型怎么玩?

    OneThink 后台模型有个模型类型: 模型下——>设计——>表单显示分组(怎么玩?) 这个将会显示在:内——>发布文章内容的时候: 单选按钮: 内容模块显示: 枚举类型可以这样玩 ...

  4. supervisor安装篇

    服务器环境: [root@kafka60 supervisor-]# uname -a Linux kafka60 -.el6.x86_64 # SMP Tue May :: UTC x86_64 x ...

  5. CSU 1808 地铁 (Dijkstra)

    Description Bobo 居住在大城市 ICPCCamp. ICPCCamp 有 n 个地铁站,用 1,2,-,n 编号. m 段双向的地铁线路连接 n 个地铁站,其中第 i 段地铁属于 ci ...

  6. mysql 数据操作 多表查询 子查询 带EXISTS关键字的子查询

    带EXISTS关键字的子查询 EXISTS关字键字表示存在. EXISTS 判断某个sql语句的有没有查到结果 有就返回真  true 否则返回假 False 如果条件成立 返回另外一条sql语句的返 ...

  7. 表单(上)EasyUI Form 表单、EasyUI Validatebox 验证框、EasyUI Combobox 组合框、EasyUI Combo 组合、EasyUI Combotree 组合树

    EasyUI Form 表单 通过 $.fn.form.defaults 重写默认的 defaults. 表单(form)提供多种方法来执行带有表单字段的动作,比如 ajax 提交.加载.清除,等等. ...

  8. 两个栈实现队列&两个栈实现队列

    为说明思想,假设队列.栈都很大,不会出现满的情况. 1. 两个栈实现队列 //前提已知: struct Stack { int top; //栈顶指针 int stacksize;//栈的大小 int ...

  9. Java小项目迷你图书管理系统

    package 迷你图书管理系统; import java.util.Scanner; public class BookMgr { public static void main(String[] ...

  10. IBM WebSphere MQ for net 报错 MQRC_NOT_AUTHORIZED

    最近进入新公司要维护以前的90年代的老系统 用NET对IBMMQ做测试 NET 4.0 +7.5 MQ 版本 待我写好NET调用的代码后出现错误MQRC_NOT_AUTHORIZED 折腾大半天往上找 ...