源码下载:https://github.com/eyjian/libmooon/blob/master/shell/process_monitor.sh。
建议将process_monitor.sh放到目录/usr/local/bin下,以方便使用。
process_monitor.sh每隔2秒(由变量monitor_interval指定)检查一次,发现进程不存在时,立即启动。
通尝需要将process_monitor.sh放到crontab上,时间部分一般设置为1分钟执行一次,如:* * * * *。
如:
# 监控HDFS NameNode
* * * * * /usr/local/bin/process_monitor.sh "/data/jdk/bin/java -Dproc_namenode" "/data/hadoop/sbin/hadoop-daemon.sh start namenode"
# 监控HDFS切换主备NameNode程序
* * * * * /usr/local/bin/process_monitor.sh "/data/jdk/bin/java -Dproc_zkfc" "/data/hadoop/sbin/hadoop-daemon.sh start zkfc"
# 监控HDFS DataNode
* * * * * /usr/local/bin/process_monitor.sh "/data/jdk/bin/java -Dproc_datanode" "/data/hadoop/sbin/hadoop-daemon.sh start datanode"
process_monitor.sh带两个参数,第一个参数是被监控的进程对象,process_monitor.sh依靠第二个参数重启被监控对象。
process_cmdline="$1" # 需要监控的进程名,或完整的命令行,也可以为部分命令行 restart_script="$2" # 用来重启进程的脚本,要求具有可执行权限
第一个参数又分两部分,第一个空格前的部分,和空格之后的部分。
第一部分为被监控对象的进程名称,对于java程序,进程名是java,而不是jar包的名称。
第二部分为参数部分,可有可无,但正是通过它来区分不同的被监控对象,对于java、shell程序等是必须的。(可以通过ps aux命令来确定进程名称和参数)
用户root,process_monitor.sh的日志文件为/tmp/process_monitor-root.log,
用户test,则process_monitor.sh的日志文件为/tmp/process_monitor-test.log,以此类推。
可以通过tail -f观察process_monitor.sh的日志,来了解process_monitor.sh的运行。