Linux进程管理工具--God-详解(1)-入门

简介:

God是一个由Ruby编写的监控架构,它可以保障你的进程为运行状态,以及可以对一些特殊情况进行进程的重启。拓展可以通过frigga来进行全局god的管理。


  最好的安装方式(通过ruby-gems):

1
gem  install  god

快速启动

 注意:快速启动需要0.12版本以上的,你可以使用以下命令查看版本:

1
god --version

  一个简单的例子:使用god保持一个简单的进程。

  下面是一个简单的脚本,名字为hello.py

1
2
3
4
5
6
7
#!/usr/bin/env python
#
import  time
 
while  True :
   print  "hello"
   time.sleep( 1 )

  现在写一个god的配置文件来管理上边的hello.py的进程,simple.god:

1
2
3
4
5
God.watch  do  |w|
   w.name =  "hello"
   w.start =  "python /root/god/hello.py"
   w.keepalive
  end

  这是一个简单的god配置,我们首先声明一个God.watch模块,它可以监控、控制上边的进程。每个watch都必须有一个唯一的名字和启动这个进程的命令。keepalive告诉god保证这个进程的存活,如果这个进程死亡了,god会通过上边定义的start来启动进程。

  这个simple的例子中,我们将god运行到前端,从而来保证我们可以进行相关的查看。

  要运行god,我们需要指定配置文件(-C),以及要求他在前端运行(-D)

1
god -C simple.god -D

  有迹象表明,god的监控流程有2种。1、最好的方式(基于事件),不是每个系统都支持它,但是支持的话会自动使用它。当产生相关事件(退出),god会立即知道。2、对于不支持事件的系统,god会使用轮询机制。PS:我这里是基于事件的机制,由于我这里的限制,没有基于轮询的,如果想看:http://godrb.com/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#Events
 
I [2014-08-11 11:10:10]  INFO: Loading simple.god
I [2014-08-11 11:10:10]  INFO: Syslog enabled.
I [2014-08-11 11:10:10]  INFO: Using pid  file  directory:  /var/run/god
I [2014-08-11 11:10:10]  INFO: Socket already  in  use
I [2014-08-11 11:10:10]  INFO: Socket is stale, reopening
I [2014-08-11 11:10:10]  INFO: Started on drbunix: ///tmp/god .17165.sock
I [2014-08-11 11:10:10]  INFO: hello move  'unmonitored'  to  'init'
I [2014-08-11 11:10:10]  INFO: hello moved  'unmonitored'  to  'init'
I [2014-08-11 11:10:10]  INFO: hello [trigger] process is not running (ProcessRunning)
I [2014-08-11 11:10:10]  INFO: hello move  'init'  to  'start'
I [2014-08-11 11:10:10]  INFO: hello start: python  /root/god/hello .py
I [2014-08-11 11:10:10]  INFO: hello moved  'init'  to  'start'
I [2014-08-11 11:10:10]  INFO: hello [trigger] process is running (ProcessRunning)
I [2014-08-11 11:10:10]  INFO: hello move  'start'  to  'up'
I [2014-08-11 11:10:10]  INFO: hello registered  'proc_exit'  event  for  pid 25779
I [2014-08-11 11:10:10]  INFO: hello moved  'start'  to  'up'

  从DEBUG信息中,你可以看出来,hello这个进程起初是没有启动的,而后god将它启动。PS:如果是基于轮询模式启动,你注意观察,他会5秒钟检查一次进程。

  为了体现基于事件,我这里多加了一步操作(在别的终端杀掉hello.py,以验证基于事件的形式):

1
2
3
4
[root@master ~] # ps -ef|grep hello.py
root     25779     1  0 11:10 ?        00:00:00 python  /root/god/hello .py
root     25803 25782  0 11:10 pts /1     00:00:00  grep  hello.py
[root@master ~] # kill -9 25779
1
2
3
4
5
6
7
8
9
10
#Event 状态:
I [2014-08-11 11:11:02]  INFO: hello [trigger] process 25779 exited {:thread_group_id=>25779, :pid=>25779, :exit_code=>9, :exit_signal=>17} (ProcessExits)
I [2014-08-11 11:11:02]  INFO: hello move  'up'  to  'start'
I [2014-08-11 11:11:02]  INFO: hello deregistered  'proc_exit'  event  for  pid 25779
I [2014-08-11 11:11:02]  INFO: hello start: python  /root/god/hello .py
I [2014-08-11 11:11:02]  INFO: hello moved  'up'  to  'start'
I [2014-08-11 11:11:02]  INFO: hello [trigger] process is running (ProcessRunning)
I [2014-08-11 11:11:02]  INFO: hello move  'start'  to  'up'
I [2014-08-11 11:11:02]  INFO: hello registered  'proc_exit'  event  for  pid 25807
I [2014-08-11 11:11:02]  INFO: hello moved  'start'  to  'up'

 PS:如果是轮询(Polls)模式,它不是即刻启动,而是等到检查周期的到来。


  到这里,你已经知道god如何来保证进程,还有一些更加有空的管理方式,如cpu达到多少重启进程,memory达到多少重启进程等等,下面是一个配置的例子:

1
2
3
4
5
6
God.watch  do  |w|
   w.name =  "hello"
   w.start =  "python /root/god/hello.py"
   w.keepalive( :memory_max  =>  150 .megabytes,
               :cpu_max  =>  50 .percent)
   end

  详解::memory_max选项属于keepalive的子命令,:cpu_max同样也是。上边的配置中,如果内存达到了150M,或CPU达到了50%,god就回重启进程。默认情况下,这些进程30秒会被检查1次,并且会在(5超3次)的时候重启,以避免偶尔的超载情况。


  这里就不在进行模拟内存泄露的情况了,下面贴一个重启cpu的日志,官方文档:http://godrb.com/ 搜memory leak

1
2
3
4
5
6
7
I [2014-08-11 13:35:46]  INFO: hello [trigger] cpu out of bounds [5.3571428566083%%, *90.3052064640262%%, *94.7069943292977%%, *96.3414634148933%%] (CpuUsage)
I [2014-08-11 13:35:46]  INFO: hello move  'up'  to  'restart'
I [2014-08-11 13:35:46]  INFO: hello deregistered  'proc_exit'  event  for  pid 26355
I [2014-08-11 13:35:46]  INFO: hello stop: default lambda killer
I [2014-08-11 13:35:46]  INFO: hello sent SIGTERM
I [2014-08-11 13:35:47]  INFO: hello process stopped
I [2014-08-11 13:35:47]  INFO: hello start: python  /root/god/hello .py

  另外,你可以使用god对一些进程进行操作:

1
2
3
4
god start hello   #hello为进程名.对应simple.god文件中的w.name
god stop hello
god restart hello
...

  所以,当你使用god的管理进程时候,可以自己编写一些特定的配置文件来管理相关的进程。例如:http出错、磁盘io较大等等问题出现时,可以帮助你做一些事。










本文转自 陈延宗 51CTO博客,原文链接:http://blog.51cto.com/407711169/1538541,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
安全 Linux Shell
四、Linux核心工具:Vim, 文件链接与SSH
要想在Linux世界里游刃有余,光会“走路”还不够,还得配上几样“高级装备”。首先是Vim编辑器,它像一把瑞士军刀,让你能在命令行里高效地修改文件。然后要懂“软硬链接”,软链接像个快捷方式,硬链接则是给文件起了个别名。最后,SSH是你的“传送门”,不仅能让你安全地远程登录服务器,还能用scp轻松传输文件,设置好密钥更能实现免-密登录,极大提升效率。
271 3
|
1月前
|
安全 Linux iOS开发
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
132 0
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
|
1月前
|
Unix Linux 程序员
Linux文本搜索工具grep命令使用指南
以上就是对Linux环境下强大工具 `grep` 的基础到进阶功能介绍。它不仅能够执行简单文字查询任务还能够处理复杂文字处理任务,并且支持强大而灵活地正则表达规范来增加查询精度与效率。无论您是程序员、数据分析师还是系统管理员,在日常工作中熟练运用该命令都将极大提升您处理和分析数据效率。
143 16
|
3月前
|
缓存 监控 Linux
Linux系统性能调优技巧和相关工具
Linux 作为一种应用应展和系统服务的优选操作系统,在处理性能和端到端点评估上持有出色表现。但是,在处理进程或系统处于低效状态时,性能调优就显得十分重要。本文将探讨一些 Linux 系统性能调优的常用技巧,并介绍相关工具
124 0
Linux系统性能调优技巧和相关工具
|
3月前
|
Linux 数据安全/隐私保护 iOS开发
推荐Linux环境下效能优良的双向文件同步工具
综合上述条件,对于Linux环境下的双向文件同步需求,Unison 和 Syncthing 是两个非常出色的选择。它们都有良好的社区支持和文档资源,适用于不同规模的环境,从个人使用到商业部署。Unison 特别适合那些需要手动干预同步过程、需要处理文件冲突解决的场景。而 Syncthing 更加现代化,适合需要自动、实时的数据同步与备份的环境。对于选择哪一个,这将取决于个人的使用场景和具体需求。
397 16
|
2月前
|
数据采集 编解码 运维
一文讲完说懂 WowKey -- WowKey 是一款 Linux 类设备的命令行(CLT)运维工具
WowKey 是一款面向 Linux 类设备的命令行运维工具,支持自动登录、批量执行及标准化维护,适用于企业、团队或个人管理多台设备,显著提升运维效率与质量。
|
5月前
|
Ubuntu 搜索推荐 Linux
详解Ubuntu的strings与grep命令:Linux开发的实用工具。
这就是Ubuntu中的strings和grep命令,透明且强大。我希望你喜欢这个神奇的世界,并能在你的Linux开发旅程上,通过它们找到你的方向。记住,你的电脑是你的舞台,在上面你可以做任何你想做的事,只要你敢于尝试。
337 32
|
5月前
|
Web App开发 Linux 程序员
获取和理解Linux进程以及其PID的基础知识。
总的来说,理解Linux进程及其PID需要我们明白,进程就如同汽车,负责执行任务,而PID则是独特的车牌号,为我们提供了管理的便利。知道这个,我们就可以更好地理解和操作Linux系统,甚至通过对进程的有效管理,让系统运行得更加顺畅。
157 16
|
5月前
|
Unix Linux
对于Linux的进程概念以及进程状态的理解和解析
现在,我们已经了解了Linux进程的基础知识和进程状态的理解了。这就像我们理解了城市中行人的行走和行为模式!希望这个形象的例子能帮助我们更好地理解这个重要的概念,并在实际应用中发挥作用。
125 20