本节尝试将监控进程的方式交给调用者。主要有两个原因:
1. 调用者传递判定代码,这样可以根据不同的平台进行变化,比如windows肯定没有ps -def 命令。这样可以适应更多的情况
2. ps -def | grep ***的方式,在newlisp中返回的表的元素数目少数时候会少一个元素,比如我在监控mongodb的时候遇到下面的元素有时候得不到。
"root 10658 10655 0 00:46 ? 00:00:00 grep mongodb"
因此如果还用
(> l 2)
来判断是不正确的,会误报。
先调整一下filter.lsp,如下例:
(set 'filters (list '((exec "pidof mongod") "mongodb" (exec "service mongodb start"))
))
第一个元素现在是一个list,运行pidof命令,如果找到mongod进程,则返回含有进程id的list,否则返回()
再修改一下process.lsp代码:
#!/usr/bin/newlisp
(set 'cur-path "/opt/detector")
(load (append cur-path "/filter.lsp"))
(load (append cur-path "/config.lsp"))
(define (check-process check-cmd)
(set 's (eval check-cmd))
(add-log (string s))
s
)
(define (add-log msg)
(println msg)
(append-file (append cur-path "/process.log") (append "\n" (string (now 480)) " "))
(append-file (append cur-path "/process.log") (append ": " msg))
)
(define (call-api process-name process-status)
(set 'data (format "ip=%s&hostName=%s&type=proc_%s&values=%lld|%f" ip host_name process-name (date-value) process-status))
(println data)
(set 'r3 (post-url (format "http://%s/wind_tunnel/api/post/data" server) data))
(println r3))
(dolist (sub-list filters)
(if (check-process (first sub-list))
(begin
(add-log (append (sub-list 1) " is alive\n"))
(call-api (sub-list 1) 1.0)
)
(begin
(add-log (append (sub-list 1) " is dead\n"))
(eval (sub-list 2))
(call-api (sub-list 1) 0))))
(exit)
好,现在MongoDB进程监控正常了,不会误报。并且可以在filter.lsp中配置各种专用命令来检测进程。
分享到:
相关推荐
newlisp中文教程,作为lisp的后起之秀,newlisp有些理念比较有价值,值得学习,所以分享下,希望对大家有用
需要一组 newlisp 脚本来监控不占用大量资源的 Linux 系统。 这包括: bb-base:newlisp 中的 xymon 基础脚本集。 bb-mysql:newlisp 中的 xymon mysql 监控脚本集。 bb-wx:Newlisp 脚本,用于从 Weather ...
newlisp实验室newlisp-labs是一组示例代码,其主要目的是试验和测试newLISP # ubuntusudo apt-get install libreadline-dev libffi-dev libevent-devsudo ln -s /usr/lib/x86_64-linux-gnu/libsqlite3.so /usr/local...
====一个newLISP-www.newlisp.org-宏,它使用户可以内联“定义”可调用的外部代码,就像他们“定义” lambda或宏一样。 C,包括汇编语言和普通对象代码插件。 对象代码插件没有外部依赖关系。 C和Assembly插件依赖...
newlisp-矩阵-客户端这是一个用于化持久通信的客户端库,主要用作机器人的基础。地位该项目处于早期开发阶段。 这是我的第一个 newlisp 项目,所以风格有时可能会改变。 一些代码是实验性的。示例用法 (load "matrix...
关于一个类似于LISP的脚本语言“ newLISP”的小模块。它只是为个人使用而编写的,因此不是很有条理。使用共享库的用户可能无法在64位版本上运行(例如zlib.lsp)其他用于编辑Emacs的类型确定库 --iconv库* ck解释器...
适用于BSD,LINUX,MacOS X,SunOS和Win32的newLISP:小型,快速的350+功能,-C-,MySQL,PostgreSQL,SQLite,ODBC,TCP / IP,UDP,XML,Java接口,字符串处理,正则表达式,数学,财务,统计功能,Win32 DLL
我想让我的newlisp程序访问MongoDB. 现在已经有MongoDB C driver,但是我没有时间去学习,只想尽快的完成工作。下面是我的方法,用C++创建一个动态库,这个动态库引用了MongoDB C++ driver. 但是会用extern "C" 导出...
因为 aardio奇特的语言特性,aardio的胶水能力极强,在aardio中可以非常方便的调用C语言、C++、C#、Java、Python、Javascript、Node.Js、Flash ActionScript、PHP、VBScript、NewLISP、Delphi、Go语言 .........
因为 aardio奇特的语言特性,aardio的胶水能力极强,在aardio中可以非常方便的调用C语言、C++、C#、Java、Python、Javascript、Node.Js、Flash ActionScript、PHP、VBScript、NewLISP、Delphi、Go语言 .........
newlisp.esy nice.esy nncron.esy nsis.esy opal_20051105.esy pdp11.esy php.esy php4.2.esy php5.esy php5a.esy pic16asm.esy plsql.esy postscript.esy PowerShell.esy PowerShellV2.esy ...
它支持多种编程语言: PythonJavaScript Java走RubyPerla 瓦拉NewLisp 诡计OCaml 其他一些实验性绑定用于: 吉尔C ++ C# 该软件包还包含vdoc /子目录,该子目录包含用于生成所有的规则。依存关系要从存储库构建...
SDB(字符串数据库) sdb是基于djb的cdb磁盘... vala,luvit,newlisp和nodejs的绑定 sdb数据库的命令行前端 具有sdb后端的memcache客户端和服务器 数组支持(语法糖) json解析器/获取器(js0n.c) 裂口 基于cdb代码
要在浏览器中快速记录笔记,请使用电子名片盒系统,数据库以及有关主题和时间的报告。 纯净而简单。 使用newLISP作为本地主机。
SICP-答案计算机程序的结构和解释 这个项目包含了我对本书中这些问题的答案。其中一些来自的作品,请参见
阅读更多AI阅读湖二年级项目
Meldingsplichtige API 自动提交API的测试堆栈。 该堆栈将在不久的将来集成到中。运行应用程序docker-compose up堆栈是从开始构建的。清理数据库有时您可能需要清理数据库并确保其处于原始状态。...
百度更好的杜bdu以人类可读的格式显示文件大小,但按大小正确排序(如果有超级猫可用,则按大小)上色。依存关系系统工具 [可选]用法以递增顺序显示当前目录中所有文件的文件大小: bdu 以递增顺序显示当前目录中...
EMSE-DeepCom EMSE-DeepCom的源代码和数据集 模型训练 命令: python3 __main__.py config.yaml --train -v 从Github提取的项目 项目信息列在文件projects.txt中。... Java方法和类在项目中的分布 ...
粗短 Stubby的Docker映像 概述 致谢 Dockerfile改编自仓库可用文件。 版本控制 GitHub标签 该存储库使用[语义版本控制]来跟踪该项目的发布。 此存储库使用“固定” GitHub标记,即,一旦创建,标记将始终指向相同的...