关于服务器定时重启并利用批处理加载相关服务的完整方案
我们经常因为各种原因,需要对服务器进行重启。有时我们会遇到要将某些程序在服务器重启后再加载自动运行,但它们的运行又需要等待服务器重启完成之后一段时间方可加载。一个典型的例子是:我们希望某个程序(比如:某Tomcat程序)由服务器重启后自动运行,但该程序又需要使用SQL SERVER数据库,而数据库的启动是在服务器启动一段时间后才能完成。现在的问题是:如果我们在服务器启动后马上运行该程序时,数据库还根本没有启动起来!
如何解决这种问题呢?
1、服务器的定时重启
重启的办法很多,有使用shutdown.exe的,有使用iisreset的。
比如:
(1)使用以下代码可以将重启服务每周一、二、三、四、五、六、日早上5点30分加载运行:
at 5:30 /every:M,T,W,Th,F,S,Su shutdown.exe /r
完整代码:
@echo off
echo ┌────────────────────────┐
echo │Windows服务器定时重启
echo │------------------------------------------------│
echo │平台:w2k/w2k3测试通过
echo └────────────────────────┘
echo 正在设置……
at 5:30 /every:M,T,W,Th,F,S,Su shutdown.exe /r
echo 设置完成,请按任意键退出……
pause>nul
(2)还可以使用下面关键代码:
c:\windows\system32\iisreset.exe /reboot
在任务计划中加上相关任务即可,这都不是什么大问题。
2、服务器启动后加载的服务或运行程序
以下阐述的是如何加载某些需要在服务器启动后自动启用的服务或应用程序的问题,比如:我们可能需要在SQL SERVER启动后才能再运行我们的一些程序。这时,采用普通的办法就不灵了。
下面代码中的几个程序(分别是Sender.cmd,startWebLogic.cmd,startPublished.bat,mp-import.bat),都是需要依次启用的,由于程序的启用需要时间,所以,分别使用了不同的时间间隔来启动它们。
其中,Sender.cmd的运行依赖于数据库的正常运行,所以,在此之前使用了ping -n 150 -w 500 0.0.0.1>nul的关键代码以做延时之用。
以下为完整的代码(c:\autorun.bat):
rem ----------------代码开始------------------
rem @echo off
ping -n 150 -w 500 0.0.0.1>nul
d:
cd\transa\Transa-Sender
start "" "d:\transa\Transa-Sender\Sender.cmd"
ping -n 8 -w 500 0.0.0.1>nul
d:
cd\beac\epaper
start "" "d:\beac\epaper\startWebLogic.cmd"
ping -n 10 -w 500 0.0.0.1>nul
d:
cd\publishedold
start "" "d:\publishedold\startPublished.bat"
ping -n 6 -w 500 0.0.0.1>nul
d:
cd\beac\epaper\applications\mp\import2mp
start "" "d:\beac\epaper\applications\mp\import2mp\mp-import.bat"
rem --代码结束--
上面“c:\autorun.bat”的相关内容根据你自己的需要进行编写,完成后请在定时任务计划中加载,并选择服务器启动时运行。
有人在想:为什么还需要d:,cd\transa\Transa-Sender等命令行,而不直接使用start "" "d:\transa\Transa-Sender\Sender.cmd"呢?原因是,Sender.cmd里面还有关于路径的相关命令,如果不在其当前目录下运行,某些程序就无法正常使用。
关于ping -n 150 -w 500 0.0.0.1>nul这种延时方法,你可以百度搜索一下,此处不讲解了。
3、总结
使用定时任务计划与shutdown.exe、iisreset/reboot完成服务器定时重启,同时服务器启动时加载批处理程序(如上述c:\autorun.bat),该处理程序中使用“ping -n 延时时间 ……”等作延时处理,再使用start "" "完整的程序路径名称"加载运行的相关程序或服务。