Windows服务器设定自动重启Apache服务的操作记录

当初也是一不小心入了Windows的坑,导致很多东西都运行的不太顺畅。这不偶尔会发现windows下的Apache服务会吊死,也可能是其他问题导致,然后产生了网站假死,没有任何反应的情况。但只要后台一重启Apache服务,立马就恢复了。但也不能实时一直24小时监测着,网上找找下,也没发现什么好的解决办法。那没辙,只能用土办法了。定时给Apache服务重启一下,看看有没有效果。

定时重启涉及到服务器的操作,并且必须要满足这2个条件:

  • 必须全自动运行,无需人工干涉;
  • 要能记录相关的操作,即留下日志。

服务器现在都支持了计划任务,应该不是什么难事的。那就开始吧。

创建批处理文件+日志保存文件

首先知道服务的重启是没有restart这个参数的,net命令支持start#启动,stop#停止。重启就等于=停止+启动。也就是把命令多2行了。就是:

net stop apache2.4

net start apache2.4

图1.使用net命令start或stop服务

接下来就是要把这命令保存成一个批处理文件,让计划任务自动运行该批处理文件,然后运行的情况记录下了。为了在日志文件中能够看到当前服务运行的日期时间,所以还得加2条命令,就是:

图2.批处理文件

date /t

time /t,之所以加上/t 的参数就是避免需要人工输入日期、时间的。否则系统会一直等待输入,无法继续往下走了。则批处理文件就比较简单了,命名为restart.Apache.bat

下一步则是需要用另外一个命令,将该批处理的文件的日志保存到系统文件当中。

日志的保存,则新建一个log的文件夹专门用来放日志,并对日志的命名使用按日期、时间来,方便后续的查看。例如 20190428-103410.log 这样的,一眼就能知道是什么时候的文件。那需要截取下当前日期、时间,并将之嵌入到文件名中来。可见需要使用截取法,将时间、日期获得,具体的参数为:

%date:~0,4%%date:~5,2%%date:~8,2%-%time:~0,2%%time:~3,2%%time:~6,2%

%date:~0,4%意思为从左边开始偏移0位,并取4位数字的意思。这里是把中间的-去掉了,如果需要的话可以直接简写成%date:~0,10%,就获得了2019-04-28 这样的日期格式。时间的话因为文件名中不能有:的存在,所以必须使用截取再合并的方法了。

图3.获得日期时间的格式

这样子的话,就可以日志的的文件名与运行的日期时间相关,并确保了唯一性了。文件命名为savelog.bat

整体的命令就是:

restart.Apache.bat >log/%date:~0,4%%date:~5,2%%date:~8,2%-%time:~0,2%%time:~3,2%%time:~6,2%.log

restart.Apache.bat 、savelog.bat 两个文件放一个文件夹下,并在同一个文件夹下新建log文件。

加入系统计划任务中

文件准备好了, 接下来就是让自动运行了。

打开服务管理器,工具中的任务计划程序,在右侧操作栏点击“创建任务”。

图4.创建计划任务

选项卡:常规,输入名称 Apache服务自动重启,因为服务的命令行操作务必需要管理员权限的,如果不是默认的administrator的话则需要先打开它并设置密码,空密码是不行的。并且选择 不管用户是否登录都要运行,避免没有登录的时候就无法运行了。

触发器:选择新建,设置为每天,并选择运行的开始时间,每天则为间隔一天就运行一次了。

操作:选择新建,在新建操作中,选择启动程序,在程序或脚本中找到savelog.bat。并且一定要在起始于(可选)这里填上bat文件所在的文件夹,否则运行将报错0x1代码

条件、设置两个选项卡可以默认,无需修改。保存时,系统会提示输入administrator的密码。则可以在窗口列表中看到已经创建成功的计划任务。

图5.创建成功的计划任务

当然这个操作也可以通过schtasks.exe这个命令来完成。

测试一下看看效果怎样:

可见确实自动停止了服务,并正常重新启动了。在日志文件夹中也自动生成了记录。

图6.测试是否正常自动运行
图7.日志文件

至此算是调测成功,下一步则把触发的时间修改到半夜,再保存即可。

至于效果如何,则需要时间的检验了。

修正输入日志文件名的问题:

经过2天的测试,的确可以自动重启Apache服务器,但是生成的日志文件名出了点问题。文件名是20190429-、20190430-这样的,后缀也没有了。用记事本或者notepad++都可以打开,记录是没有问题的。但是就是log的文件名出了问题。

图8.服务器上的时间6点不是06而是6

检查后发现,测试的时候是11点多,time得到的时间是正常的时间,但自动运行的时间是10点之前,即时间是如图的格式。导致了命令取得的字符出错。问题在这里了,然后取左边1位也不行,取5位也不行,那反其道而行之从右边开始取数,就是一个比较稳定的情况了。

保存的命令修正如下:

restart.Apache.bat >log/%date:~0,4%%date:~5,2%%date:~8,2%-0%time:~-10,1%%time:~-8,2%%time:~-5,2%.log