写了一个bbsd的服务脚本,刚开始用killall直接杀进程,发现老卡在bbsd那里,在Julyclyde的建议下,用-x模式追踪了一下,发现当killall到bbsd的时候会提示killed,接下来后面的代码就不执行了,如果把后面的代码提前,完全可以执行,但到了bbsd那里还是会终止
无奈之下之好请kill出场,顺利解决。
有无大牛解释一下原因?
另附目前正常的服务控制脚本:
#==============================================================================
#!/bin/bash
startbbsd()
{
/home/bbs/bin/miscd daemon &
/home/bbs/bin/bbslogd &
/home/bbs/bin/bbsd -p 23 &
/home/bbs/bin/sshbbsd -p 22 &
/home/etc/php-cgi.sh start
if [ -s /home/bbs/crontab.bbs ]
then
/usr/bin/sudo -u bbs /usr/bin/crontab /home/bbs/crontab.bbs
else
/usr/bin/sudo -u bbs /usr/bin/crontab /home/bbs/crontab.bbs.bk
fi
}
stopbbsd()
{
/usr/bin/sudo -u bbs /usr/bin/crontab -l>/home/bbs/crontab.bbs
if [ -s /home/bbs/crontab.bbs ]
then
cp /home/bbs/crontab.bbs /home/bbs/crontab.bbs.bk
fi
/usr/bin/sudo -u bbs /usr/bin/crontab -r
/home/etc/php-cgi.sh stop
SSHBBSDPID=`ps aux|grep ^bbs|grep "sshbbsd"|awk '{printf "%s ",$2}'`
if [ ${#SSHBBSDPID} -gt 0 ]
then
/bin/kill -9 $SSHBBSDPID
fi
/usr/bin/killall -9 bbslogd
BBSLOGDPID=`ps aux|grep ^bbs|grep "/bin/bbslogd"|awk '{printf "%s ",$2}'`
if [ ${#BBSLOGDPID} -gt 0 ]
then
/bin/kill -9 $BBSLOGDPID
fi
BBSDPID=`ps aux|grep ^bbs|grep "/bin/bbsd"|awk '{printf "%s ",$2}'`
if [ ${#BBSDPID} -gt 0 ]
then
/bin/kill -9 $BBSDPID
fi
MISCDPID=`ps aux|grep ^bbs|grep "/bin/miscd"|awk '{printf "%s ",$2}'`
if [ ${#MISCDPID} -gt 0 ]
then
/home/bbs/bin/miscd flush
/bin/kill -9 $MISCDPID
fi
ipcs -m|awk '$0~/bbs/ {system(sprintf("ipcrm -m %s ",$2));}'
ipcs -q|awk '$0~/bbs/ {system(sprintf("ipcrm -q %s ",$2));}'
}
case "$1" in
start)
startbbsd
;;
restart|reload|force-reload)
stopbbsd
startbbsd
;;
stop)
stopbbsd
;;
*)
echo "Usage: $0 start|stop|restart" >&2
exit 3
;;
esac
--
FROM 59.109.6.*