最近遇到一个非常诡异的问题,mha后台进程自己中断退出了。以下是报错:
Mon Dec 21 20:16:07 2015 - [info] OK.
Mon Dec 21 20:16:07 2015 - [warning] shutdown_script is not defined.
Mon Dec 21 20:16:07 2015 - [info] Set master ping interval 1 seconds.
Mon Dec 21 20:16:07 2015 - [info] Set secondary check script: /etc/mha/bin/masterha_secondary_check -s 192.168.17.93 -s 192.168.18.93
Mon Dec 21 20:16:07 2015 - [info] Starting ping health check on 192.168.17.94(192.168.17.94:3306)..
Mon Dec 21 20:16:07 2015 - [info] Ping(SELECT) succeeded, waiting until MySQL doesn‘t respond..
Tue Dec 22 10:36:42 2015 - [info] Got terminate signal. Exit.
看报错第一反应理解为由于中断信号断开而导致退出程序
这里有个疑问:为什么我用nohup /etc/mha/bin/masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover &
这样的方式执行后台运行命令,怎么程序会随终端断开而退出呢?想不通。印象中以前执行都没有这样的问题的,肯定是哪里不对
查阅nohup相关的资料:
使用时注意:
在当shell中提示了nohup成功后,还需要按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端;如果在nohup执行成功后直接点关闭程序按钮关闭终端的话,这时候会断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown,起不到关掉终端后调用程序继续后台运行的作用。
看到这里回忆下之前自己的操作可能是有问题的,于是对nohup操作进行下面测试:
注:mha管理服务端是安装在A机器上,
测试1:直接连接mysqlA服务器,在A服务器执行nohup /etc/mha/bin/masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover & ,正常退出,或直接关闭终端退出都不会引起mha后台进程异常退出。
测试2:先连接mysqlB服务器,再从B服务器ssh到A服务器,再重复上面的命令当执行完后台命令后正常exit退出终端后,一切和上面的操作一样,mha后台进程不会异常退出。
测试3:先连接mysqlB服务器,再从B服务器ssh到A服务器,再重复上面的命令当执行完后台命令后非正常退出(终端超时断开或直接关闭securecrt程序)的话,这个时候mha后台进程也跟随终端退出而退出.
仔细回忆了下我确实是通过某台服务器ssh到mha服务器上面执行的命令没有正常退出终端造成的。问题终于找到了
当然如果你的问题和我的不一样也可以用另外方法避免后台进程异常退出,那就是把命令写在脚本里面通过运行脚本就万无一失了.
参考资料:
http://www.cnblogs.com/mysqlplus/p/5070753.html --关于nohup
http://www.cnblogs.com/gomysql/p/4688920.html --类似的问题解决方法