linux定时执行脚本重启服务器,最常用的方案是crontab配合systemd或init.d服务管理脚本,核心就是先写一个健壮的重启脚本,再用cron按计划触发,整个过程半小时能搞定。这篇文章不讲虚的,直接给你可落地的脚本模板、操作命令和避坑点。
linux定时重启服务器的脚本怎么写
解决”怎么定时”之前,先解决”怎么重启”,很多人在这一步翻车:直接把systemctl restart nginx写进crontab,结果服务没起来,原因多半是脚本里缺少环境变量或路径写死。
先确认你的服务跑在什么进程管理下
现在主流Linux发行版(CentOS 7+、Ubuntu 16+、Debian 8+)都用systemd,用systemctl restart 服务名,老一点的CentOS 6或Ubuntu 14用init.d,用service 服务名 restart。
不确定就执行这条命令看结果:
ps -p 1 -o comm=
输出systemd就是新方案,输出init就是旧方案,行业共识认为,2026年还在用init.d的生产环境已经相当少了,遇到老系统建议先迁移到systemd再谈定时重启。
三个拿来即用的重启脚本模板
以常见的三个服务为例,脚本放在

/usr/local/bin/下,记得加执行权限chmod +x。
重启nginx的脚本(reload方式,不中断连接):
#!/bin/bash
# /usr/local/bin/restart_nginx.sh
nginx -t > /tmp/nginx_check.log 2>&1
if [ $? -eq 0 ]; then
systemctl reload nginx
echo "$(date '+%Y-%m-%d %H:%M:%S') nginx reload ok" >> /var/log/nginx_reload.log
else
echo "$(date '+%Y-%m-%d %H:%M:%S') nginx config error, skip reload" >> /var/log/nginx_reload.log
fi
先做nginx -t配置检查,失败就不重载,防止把自己搞挂。
重启tomcat的脚本(优雅停机,等JVM退出):
#!/bin/bash
# /usr/local/bin/restart_tomcat.sh
CATALINA_HOME=/opt/tomcat
PID=$(ps -ef | grep catalina | grep -v grep | awk '{print $2}')
if [ -n "$PID" ]; then
$CATALINA_HOME/bin/shutdown.sh
# 最多等60秒,超时强杀
for i in $(seq 1 12); do
sleep 5
if ! kill -0 "$PID" 2>/dev/null; then
break
fi
done
kill -9 "$PID" 2>/dev/null
fi
$CATALINA_HOME/bin/startup.sh
tomcat直接kill -9会导致未落盘的session丢失,多数情况下先走shutdown.sh等5秒,不行再强杀。

重启MySQL的脚本(依赖systemd,带健康检查):
#!/bin/bash
# /usr/local/bin/restart_mysql.sh
systemctl restart mysqld
# 循环等端口起来
for i in $(seq 1 30); do
if mysqladmin ping -uroot -p'你的密码' --silent 2>/dev/null; then
echo "$(date) mysql restart ok" >> /var/log/mysql_restart.log
exit 0
fi
sleep 2
done
echo "$(date) mysql restart timeout" >> /var/log/mysql_restart.log
exit 1
把脚本挂进crontab,就这两行命令
crontab -e
然后写入一行:
30 2 /usr/local/bin/restart_nginx.sh
这行含义是每天凌晨2:30执行一次nginx重启脚本,五个位置依次是:分、时、日、月、周,常用写法:
30 2:每天2:300 /6:每6小时执行一次30 2 0:每周日凌晨2:3015 3 1:每月1日凌晨3:15
保存后执行crontab -l确认写进去了,再手动跑一遍脚本看日志,完事。

crontab定时重启tomcat和nginx有什么区别
同样是”重启”,tomcat和nginx的脾气完全不同,搞清楚区别,你才知道什么频率合适、要不要reload替代restart。
tomcat重启要”慢”JVM的优雅停机
tomcat是Java应用服务器,每个请求占用一个线程,JVM里有堆内存、线程池、连接池,重启意味着销毁整个JVM进程再重新拉起,这个过程中:
- 新请求会连接失败,直到端口重新监听
- 未完成的业务会被中断
- 启动阶段要加载类、初始化连接池,耗时通常在10秒到1分钟不等
所以tomcat的定时重启不能太频繁,一天一次在低峰期(比如凌晨2-3点)就够,如果每天都要重启tomcat才能稳住,大概率是内存泄漏,该去调JVM参数而不是靠定时任务续命。
nginx重启可以”快”reload机制
nginx是事件驱动模型,支持reload平滑重载配置,reload不中断连接,master进程重新加载配置、fork新的worker,旧的worker处理完手头请求就退出,整个过程对用户几乎无感知。
所以nginx适合用reload代替restart,定时任务崩溃的风险更低,也不用挑凌晨。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/818526.html


评论列表(3条)
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于重启的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!
@大果8748:读了这篇文章,我深有感触。作者对重启的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!
读了这篇文章,我深有感触。作者对重启的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!