在生产环境中,有些应用可能存在长期运行后资源占用增加、连接异常、服务响应变慢等情况。
除了人工定期重启,也可以通过Linux 自带的 crontab 定时任务,实现 TongWeb 自动重启。
同时,为了避免重启失败后无人发现,可以在脚本中增加启动检测和失败重试机制。
一、使用 systemctl 管理 TongWeb
前提是已经将 TongWeb 配置成 systemd 服务,如果不了解,可以看一下我的这篇文章 👉👉👉使用 systemctl 管理 TongWeb 启停
例如:
systemctl start tongweb
systemctl stop tongweb
systemctl restart tongweb
systemctl status tongweb
后续定时任务直接调用:
systemctl restart tongweb
即可。
二、配置 Crontab 定时任务
编辑定时任务:
crontab -e
1. 正式环境定时重启
例如每周六凌晨 3 点重启 TongWeb:
0 3 * * 6 /home/chenyanliang/dft/tongweb/restart_tongweb.sh
说明:
0 分钟
3 小时
* 日期
* 月份
6 星期六
表示:
每周六凌晨 03:00 执行一次 TongWeb 重启脚本。
2. 测试环境验证
为了验证脚本是否生效,可以设置每分钟执行一次:
* * * * * /home/chenyanliang/dft/tongweb/restart_tongweb.sh
测试完成后,需要恢复正式时间配置,避免生产环境频繁重启。
三、TongWeb 定时重启脚本
示例:
#!/bin/bash
LOG_DIR="/home/chenyanliang/dft/tongweb/logs"
LOG_FILE="${LOG_DIR}/cron_restart.log"
ADMIN_PORT=9060
RETRY_MAX=3
SLEEP_CHECK=10
mkdir -p ${LOG_DIR}
print_log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> ${LOG_FILE}
}
print_log "===== 开始执行TongWeb定时重启 ====="
systemctl restart tongweb
print_log "已执行TongWeb重启,等待${SLEEP_CHECK}s检测服务"
retry_count=0
while [ ${retry_count} -lt ${RETRY_MAX} ]
do
sleep ${SLEEP_CHECK}
if ss -tln | grep ":${ADMIN_PORT}" > /dev/null 2>&1
then
print_log "检测成功:${ADMIN_PORT}端口正常监听,TongWeb启动完成"
exit 0
fi
retry_count=$((retry_count + 1))
print_log "第${retry_count}次检测失败,端口未监听,重新执行重启"
systemctl restart tongweb
done
print_log "严重故障:连续${RETRY_MAX}次重启后服务仍未恢复"
exit 1
四、脚本执行流程
整个流程如下:
-
到达定时时间,crontab 调用脚本。
-
执行:
systemctl restart tongweb
重启 TongWeb。
-
等待服务启动。
-
检测 TongWeb 管理端口:
ss -tln | grep :9060
确认服务是否监听。
- 如果启动失败:
- 自动再次执行重启。
- 最大重试 3 次。
- 记录失败日志。
五、查看定时任务执行情况
查看当前用户定时任务:
crontab -l
查看 cron 执行日志:
Ubuntu:
grep CRON /var/log/syslog
CentOS:
grep CRON /var/log/cron
查看 TongWeb 重启日志:
cat /home/chenyanliang/dft/tongweb/logs/cron_restart.log
