生产环境如何重启tomcat,直接杀进程有弊端没有?

如果直接杀掉tomcat进程,那么一些listener的contextDestroyed方法就没有机会执行了吧?这样就有逻辑漏洞了吧

阅读 5k
2 个回答

如果是系统安装,可以直接用服务管理脚本进行管理,
如ubuntu下/etc/init.d/tomcat8
使用命令

$ sudo service tomcat8 restart

脚本内容如下:

 stop)
log_daemon_msg "Stopping $DESC" "$NAME"

set +e
if [ -f "$CATALINA_PID" ]; then 
start-stop-daemon --stop --pidfile "$CATALINA_PID" \
--user "$TOMCAT8_USER" \
--retry=TERM/20/KILL/5 >/dev/null
if [ $? -eq 1 ]; then
log_progress_msg "$DESC is not running but pid file exists, cleaning up"
elif [ $? -eq 3 ]; then
PID="`cat $CATALINA_PID`"
log_failure_msg "Failed to stop $NAME (pid $PID)"
exit 1
fi
rm -f "$CATALINA_PID"
rm -rf "$JVM_TMP"
else
log_progress_msg "(not running)"
fi
log_end_msg 0
set -e
;;

基本的思路是先用start-stop-daemon发停止信号给tomcat进程, 如果进程不能顺利结束,再用kill杀掉. 这里TERM/20/KILL/5意思是先发送TERM信号20秒没有结束接着发送KILL信号,超时时间为5秒.
如果你自己管理,也可以参考上面脚本来完成.

最好盎然是通过shell关闭,不要直接kill -9

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进