在运维Linux服务的过程中,碰到服务器宕机或者人为失误kill掉进程以后,后台任务出现失败,无法自动重启的情况你会怎么处理呢?利用screen、&、nohup?这些方式显得不够可靠和灵活..
对于运维人员来讲,服务的持续性和可靠性始终是第一位的,那么有没有一种能够实时监控后台程序或者关键服务运行情况,并且让其稳定的在后台运行的方式呢?今天小编就和大家分享一套由Python开发的强大的进程管理程序——Supervisor。
Supervisor是一个客户端/服务端系统,它允许用户监视和控制类UNIX操作系统上的大量进程。通过Supervisor我们不仅可以实时监控进程的运行状态,批量重启进程,而且当程序挂掉或服务机宕机的情况下能很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。
Supervisor安装配置
1、supervisor在linux中安装较为简单:
➜ ~ easy_install supervisor安装完成后会生成三个执行程序:supervisortd、supervisorctl、echo_supervisord_conf,分别是supervisor的守护进程服务、客户端、生成初始配置文件程序。
supervisor初始化配置文件:
➜ ~ echo_supervisord_conf > /etc/supervisor修改配置文件,这里只用修改两处,其他使用默认配置即可,最终结果如下图:
第一处取消supervisorctl监听端口的注释,第二处修改管理进程配置文件的目录。当我们想用supervisor管理service进程时,只需在对应目录/etc/supervisord/下加一个<service>.conf文件即可
启动supervisord:这里-c指定我们supervisord启动的配置文件
➜ ~ supervisord -c /etc/supervisord查看当前托管在supervisord中进程
➜ ~ supervisorctl status此时由于我们在/etc/supervisord/下面没有配置任何<service>.conf文件,这里没有任何显示。
2、下面开始托管服务在supervisor中(此处以redis和一个简单的后台ping任务来做例子)
1)➜ ~ vi /etc/supervisord相关配置及注释入下图,这里启动一个名叫test-redis-6379的redis服务
supervisor中每修改<service>.conf文件需要执行以下命令来添加服务或者修改服务:
➜ ~ supervisorctl reread #读取托管服务配置文件 ➜ ~ supervisorctl add test-redis-6379 #添加test-redis-6379服务 ➜ ~ supervisorctl status test-redis-6379 #查看服务状态 2)➜ ~ vi /etc/supervisord查看所有托管服务状态:
3、测试服务异常kill是否能够自动重启,保证持续提供服务的能力,这里我手动杀掉了所有服务,通过supervisor我们能够看到服务被迅速拉起,自动重启实现:
4、测试服务器异常宕机重启,服务和脚本能否自动启动,这里有个前提配置需要将supervisor设置为开机自启动,这样托管的服务才能被supervisorctl带起。
➜ ~ echo "/usr/bin/supervisord -c /etc/supervisord" >> /etc可以看到服务器启动后,supervisor自启动,托管的自定义服务和脚本都能够被supervisor带起来,对于运维人员来讲实在是一个管理特殊服务和脚本的利器,其他配置和妙用可以自行研究。