在Linux环境下运行Tomcat应用程序时,为了保证服务的稳定性和可用性,需要定期执行状态监测、日志清理、内存回收等维护操作。通过Crontab结合自定义shell脚本,可以实现这些操作的自动化执行,无需人工干预。
一、Crontab基础概念
Crontab是Linux系统自带的定时任务工具,可以按照预设的时间规则自动执行指定的命令或脚本。每个用户都可以拥有自己的Crontab任务列表,系统级的定时任务则存放在/etc/crontab文件中。
Crontab的时间配置格式如下:
* * * * * 命令或脚本路径 分 时 日 月 周
- 分:0-59,*表示每分钟
- 时:0-23,*表示每小时
- 日:1-31,*表示每天
- 月:1-12,*表示每月
- 周:0-7,0和7都代表周日,*表示每周的每一天
二、编写Tomcat监测维护脚本
1. 监测Tomcat运行状态脚本
以下脚本可以检测Tomcat进程是否存在,如果不存在则自动启动Tomcat:
#!/bin/bash
# 定义Tomcat安装路径
TOMCAT_HOME=/usr/local/tomcat
# 定义Tomcat启动脚本路径
START_SCRIPT=$TOMCAT_HOME/bin/startup.sh
# 获取Tomcat进程数量
TOMCAT_PID_COUNT=$(ps -ef | grep tomcat | grep -v grep | wc -l)
# 判断进程是否存在
if [ $TOMCAT_PID_COUNT -eq 0 ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') Tomcat未运行,开始启动" >> /var/log/tomcat_monitor.log
# 启动Tomcat
$START_SCRIPT
echo "$(date '+%Y-%m-%d %H:%M:%S') Tomcat启动完成" >> /var/log/tomcat_monitor.log
else
echo "$(date '+%Y-%m-%d %H:%M:%S') Tomcat运行正常" >> /var/log/tomcat_monitor.log
fi
2. 清理Tomcat日志脚本
Tomcat运行一段时间后会产生大量日志文件,占用磁盘空间,以下脚本可以定期清理7天前的日志:
#!/bin/bash
# 定义Tomcat日志目录
TOMCAT_LOG_DIR=/usr/local/tomcat/logs
# 清理7天前的catalina.out日志备份文件
find $TOMCAT_LOG_DIR -name "catalina.out.*" -mtime +7 -exec rm -f {} ;
# 清空当前catalina.out日志,避免文件过大
cat /dev/null > $TOMCAT_LOG_DIR/catalina.out
echo "$(date '+%Y-%m-%d %H:%M:%S') Tomcat日志清理完成" >> /var/log/tomcat_monitor.log
3. 监测Tomcat端口可用性脚本
除了检测进程,还可以检测Tomcat监听的端口是否正常响应,默认Tomcat端口为8080:
#!/bin/bash
# 定义Tomcat端口
TOMCAT_PORT=8080
# 定义Tomcat访问地址
TOMCAT_URL=http://127.0.0.1:$TOMCAT_PORT
# 定义Tomcat启动脚本路径
START_SCRIPT=/usr/local/tomcat/bin/startup.sh
# 使用curl检测端口响应
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" $TOMCAT_URL)
if [ $HTTP_CODE -ne 200 ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') Tomcat端口$TOMCAT_PORT响应异常,状态码:$HTTP_CODE,开始重启" >> /var/log/tomcat_monitor.log
# 停止Tomcat
/usr/local/tomcat/bin/shutdown.sh
sleep 5
# 启动Tomcat
$START_SCRIPT
echo "$(date '+%Y-%m-%d %H:%M:%S') Tomcat重启完成" >> /var/log/tomcat_monitor.log
else
echo "$(date '+%Y-%m-%d %H:%M:%S') Tomcat端口$TOMCAT_PORT响应正常" >> /var/log/tomcat_monitor.log
fi
三、配置Crontab定时执行
首先给上述脚本添加可执行权限:
chmod +x /usr/local/scripts/tomcat_monitor.sh chmod +x /usr/local/scripts/tomcat_log_clean.sh chmod +x /usr/local/scripts/tomcat_port_check.sh
然后编辑当前用户的Crontab任务列表:
crontab -e
在打开的编辑器中添加以下定时规则:
# 每5分钟检测一次Tomcat运行状态 */5 * * * * /usr/local/scripts/tomcat_monitor.sh # 每天凌晨2点清理Tomcat日志 0 2 * * * /usr/local/scripts/tomcat_log_clean.sh # 每10分钟检测一次Tomcat端口可用性 */10 * * * * /usr/local/scripts/tomcat_port_check.sh
保存退出后,Crontab会自动加载新的任务规则,可以通过以下命令查看当前用户的Crontab任务:
crontab -l
四、常见问题排查
如果定时任务没有正常执行,可以按照以下步骤排查:
- 检查脚本是否有可执行权限,路径是否正确
- 查看/var/log/cron日志,确认Crontab是否触发了任务执行
- 检查脚本中的命令是否使用了绝对路径,Crontab执行环境的PATH变量和用户登录时的PATH可能不一致
- 查看自定义的日志文件/var/log/tomcat_monitor.log,确认脚本执行过程中的输出信息
五、总结
通过Crontab结合shell脚本,可以实现Tomcat应用程序的自动化监测和维护,大幅降低运维人员的工作负担。实际使用中可以根据业务需求调整监测频率和维护逻辑,比如增加内存使用率监测、自动备份应用包等功能,进一步完善自动化运维体系。
CrontabTomcatLinuxshell_script修改时间:2026-06-13 23:15:26