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 服务的批处理文件停止、归档日志并重新启动服务的主要内容,如果未能解决你的问题,请参考以下文章

Linux日志管理与分类

Oracle Windows/Linux定期清理归档日志

Windows批处理文件查找单词并重命名文件

Oracle 数据库归档满处理办法

Windows批处理脚本实现批量复制文件并重命名

如何用批处理文件(.bat)停止或启动windows的服务 ?