Linux监控进程存活状态

早上起来发现wiki系统挂了,也许是有同学手动将其关闭了,也许是它自己关闭了。查找各种运行日志没有发现任何异常的地方。因此,需要时不时地检查一下wiki系统是否还存活着?如果不是存活的状态,则需要将其重新启动。

进程监控脚本

我们知道,查看进程的命令是ps,通常我们更喜欢带上参数,如ps -ef或者是ps -aux。要查找某一个进程的时候,我们需要加上这个进程的特征字符串,比如wiki系统的进程中包含confluence字符串,我们就是用ps -ef | grep confluence来查看wiki系统的进程存活状态,结果如下。通常情况下得到的列表除了进程本身外,还有一个就是查看这个进程状态的进程。可以看到进程12996就是当前查看进程的ID。

1
2
3
4
[root@whubdccl wiki_ops]# ps -ef | grep confluence
conflue+ 7733 1 5 16:02 ? 00:02:56 /opt/atlassian/confluence/jre//bin/java -Djava.util.logging.config.file=/opt/atlassian/confluence/conf/logging.properties -Djava.util.logging.manager.....
conflue+ 8069 7733 0 16:03 ? 00:00:32 /opt/atlassian/confluence/jre/bin/java -classpath /opt/atlassian/confluence.....
root 12996 9639 0 16:59 pts/0 00:00:00 grep --color=auto confluence

可以使用grep命令的反选参数来进行过滤,即grep -v grep去掉当前查看进程的信息。

因此,进程监控脚本可以写成如下形式:

1
2
3
4
5
#! /bin/bash
ps -ef | grep confluence | grep -v grep
if [ $? -ne 0 ] ; then
/etc/init.d/confluence start
fi

$?表示进程执行完的返回状态,为0表示正常执行,否则是异常的。

写入定时任务

使用crontab -e写入定时任务中,如下,设置为每两个小时检查一次。

1
* */2 * * * /root/wiki_ops/wiki_monitor.sh

总结

这个定时任务相当于一个自动唤醒的任务,就是每隔一两个小时检查一次,如果目标进程不存活,则手动启动这个进程。大大解放系统管理员的双手,可以更好地干别的事啦。

分享到