项目中用到的shell脚本,用来监控crond,ssh,thttpd几个进程的运行 ,若某一个进程异常,则立即重新启动。代码如下:
ps aux | grep "\bcrond" > /dev/null 2>&1
if [ $? -ne 0 ]; then
crond > /dev/null 2>&1
fi
ps aux | grep "\bsshd" > /dev/null 2>&1
if [ $? -ne 0 ]; then
/usr/sbin/sshd > /dev/null 2>&1
fi
ps aux | grep "\bthttpd" > /dev/null 2>&1
if [ $? -ne 0 ]; then
if [ -e /etc/thttpd.conf ]; then
/root/bin/thttpd -D -C /etc/thttpd.conf > /dev/null 2>&1
fi
fi
但运行中发现有时候其中某一个进程异常退出后无法恢复,同时ps命令看到监测shell脚本正在运行,猜测脚本被“阻塞”。
通过查阅猜测shell脚本阻塞,原因可能是启动thttpd时候阻塞住了,进而阻塞了shell。
解决办法:若让thttpd后台执行,可以解决这个问题。
ps aux | grep "\bthttpd" > /dev/null 2>&1
if [ $? -ne 0 ]; then
if [ -e /etc/thttpd.conf ]; then
/root/bin/thttpd -D -C /etc/thttpd.conf > /dev/null 2>&1 &
fi
fi
通过验证,果然如此。
为防止其他进程也出现累死的问题,也让其后台执行;
ps aux | grep "\bcrond" > /dev/null 2>&1
if [ $? -ne 0 ]; then
crond > /dev/null 2>&1 &
fi
ps aux | grep "\bsshd" > /dev/null 2>&1
if [ $? -ne 0 ]; then
/usr/sbin/sshd > /dev/null 2>&1 &
fi
ps aux | grep "\bthttpd" > /dev/null 2>&1
if [ $? -ne 0 ]; then
if [ -e /etc/thttpd.conf ]; then
/root/bin/thttpd -D -C /etc/thttpd.conf > /dev/null 2>&1 &
fi
fi
问题解决。