windows计划任务执行bat脚本失败踩坑
问题描述
在Windows服务器上部署Tomcat服务时,用Tomcat的启动脚本启动服务(start.bat
)。手动双击执行时服务正常重启,但通过Windows计划任务调度时始终失效。任务历史记录显示"操作成功完成",但实际服务状态未变化,日志文件也未生成。
Tomcat启动bat脚本,其中加了一行打印启动日志
1 | echo %DATE% %TIME% Tomcat start begin. >> "%CATALINA_HOME%\startLog.log" |
1 | @echo off |
计划任务里看定时启动成功,可以看到上次执行时间
但没有日志生成,.log文件里没有内容
初级排查
-
最小化测试验证
创建基础测试脚本test.bat
:1
2@echo off
echo %DATE% %TIME% >> D:\test.log✅ 计划任务成功写入日志
❌ 原服务控制脚本仍然失败 -
日志增强改造
在原脚本关键节点插入诊断日志:1
2echo [DEBUG] 当前目录:%CD% >> debug.log
echo [DEBUG] 原始路径:%CATALINA_HOME% >> debug.log
问题分析
-
差异对比分析
执行方式 当前目录 日志输出内容 手动执行 D:\tomcat\bin CATALINA_HOME正确识别 计划任务 C:\Windows\System32 CATALINA_HOME路径错误 -
关键代码段解析
1
2
3set "CURRENT_DIR=%cd%"
if not "%CATALINA_HOME%" == "" goto gotHome
set "CATALINA_HOME=%CURRENT_DIR%" # 依赖当前目录的致命问题原因总结:脚本中获取了环境的相对路径,当执行目录变为
System32
时,路径拼接%CATALINA_HOME%\bin\catalina.bat
指向了不存在的C:\Windows\System32\bin\catalina.bat
解决方案
方案1:配置计划任务起始目录
-
打开任务属性 → 操作 → 编辑
-
在"起始于(可选)"填入脚本真实路径
D:\tomcat\bin
方案2:脚本绝对路径改造
1 | - set "CATALINA_HOME=%CURRENT_DIR%" |
方案3:动态路径计算
1 | set "SCRIPT_DIR=%~dp0" |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 pyf的日记!