Windows 服务的批处理文件停止、归档日志并重新启动服务
Posted
技术标签:
【中文标题】Windows 服务的批处理文件停止、归档日志并重新启动服务【英文标题】:Batch file for Windows services stop, archive logs and restart the services 【发布时间】:2014-01-13 04:23:02 【问题描述】:作为我刚刚实施的解决方案的一部分,我想自动执行日志文件维护的内务管理计划。
我知道我整理的内容有点粗糙,但无论如何它都能胜任。如果可能的话,只是希望有人快速查看并微调脚本?
要求 - 理想情况下,我希望脚本: 1.停止两个服务。 2. 通过验证它们的错误级别状态来检查它们是否确实停止了。 3.如果它们处于挂起状态,则识别进程并杀死它们。 4.停止/杀死完成后,将两个特定的日志文件移动到存档文件夹 5. 重新启动服务。 6. 很高兴 - 确保它们都处于运行状态(错误级别 = 4)。
我的脚本:
echo off
:sub_StopServices
net stop sasl_svn
echo ======================================================
echo %date% %time% SASL service stopped
net stop SVNServe
echo ======================================================
echo %date% %time% SVN service stopped
::set level=%errorlevel%
sc query sasl_svn | find "STATE" | FIND "RUNNING" >NUL
sc query svnserve | find "STATE" | FIND "RUNNING" >NUL
if %errorlevel%==1 ( if %errorlevel%==1 (GOTO sub_moveLogs)
else (GOTO sub_StopServices))
if %errorlevel%==3 (taskkill /f /im svnserve.exe && taskkill /f /im saslauthd.exe)
else (GOTO sub_moveLogs))
:sub_MoveLogs
MOVE E:\cygwin\var\log\sasl_svn.log E:\cygwin\var\log\Archive\sasl_svn.log
MOVE E:\cygwin\var\log\SVNServe.log E:\cygwin\var\log\Archive\SVNServe.log
echo ======================================================
echo %date% %time% Log archive is successful
GOTO sub_StartServices
:sub_StartServices
net start sasl_svn
echo ======================================================
echo %date% %time% SASL service started
net start SVNServe
echo ======================================================
echo %date% %time% SVN service started
exit
谢谢 卡尔提克·杜拉拉詹
【问题讨论】:
【参考方案1】:对此我有两点建议:
不要直接杀死服务 exe,它可能正在完成长时间运行的操作
SC STOP VCCDataService>无
:等待停止 SET ServiceToKill=[服务名称] 任务列表 /nh /fi "imagename eq %ServiceToKill%" |查找 /i "%ServiceToKill%" >nul && ( echo %ServiceToKill% 正在运行 超时/T 15 转到等待停止 ) || ( echo %ServiceToKill% 没有运行 )
用日期重命名您的日志文件,否则您将只保留日志的一个迭代。 windows-batch-script-format-date-and-time
【讨论】:
以上是关于Windows 服务的批处理文件停止、归档日志并重新启动服务的主要内容,如果未能解决你的问题,请参考以下文章