最近使用Serv-U来架设FTP服务器,用于文件传输的桥梁。好景不长,每隔一段时间,Serv-U的服务就会自动停止。因为这个ftp服务很重要,要保证每天都能正常工作,如果只靠人每天来查看服务是否正常,牵涉精力不说,又不是十分靠谱。于是,Google之。网上各种说法都有,如FTP在流量较大的情况下,Serv-U会因为繁忙而自动停止服务。总之,找不到Serv-U周期性停止服务的原因。没办法,只好转换思路:找不到Serv-U周期性停止服务的原因,那么在Serv-U服务停止后能够检测到服务停止自动启动Serv-U服务,这个方案也为尝不可。
方案:执行计划+批处理。设置执行计划,每30分钟执行一个批处理任务。批处理的作用:读取进程列表,查看Serv-U进程是否存在;如果进程不存在,启动该服务并输出日志。
下面是批处理实现部分:
@echo off
for /f "usebackq" %%i in (`"tasklist|find /c "Serv-U.exe""`) do (
set chkstat=%%i
)
if %chkstat% == 0 (
net start Serv-U
echo ================ >> %date:~0,10%.log
echo %date% %time% check Serv-U service stop >> %date:~0,10%.log
echo restart Serv-U service! >> %date:~0,10%.log
echo ================ >> %date:~0,10%.log
)
版本不容程序文件名也不一样,我们也可以用这个代码,监控别的程序。serv_u6版本需要将Serv-U.exe替换为ServUDaemon.exe即可。大家可以到tasklist中查看。一定要对应上exe文件名,与服务名。