欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

IIS进程回收导致定时器失效的解决方法(CMD命令)

程序员文章站 2022-04-06 20:20:04
公司开发的网站使用的.net,网站中用到了定时器,放在global.asax.cs文件中,但由于iis设置了网站进程定期回收,回收后定时器也就没了。如果不让进程回收,又担心...

公司开发的网站使用的.net,网站中用到了定时器,放在global.asax.cs文件中,但由于iis设置了网站进程定期回收,回收后定时器也就没了。如果不让进程回收,又担心程序中有内存泄露。有人说可以在application_end发起http请求,但这样做和设置不让进程回收没有任何区别,结果就是该进程一直运行,只有保证不存在内存泄露才可以这样做。也有人说可以用windows service,对这个不了解,所以这招放弃了。最后想到了一个方法,编写脚本命令(这里用dos命令)访问网站,再通过windows的任务计划来定时执行脚本。.bat文件如下,直接运行该.bat,发现会用ie浏览器打开www.baidu.com,几秒后关闭,看来命令运行是ok的。

复制代码 代码如下:

::访问网站,触发定时器
::ping10次后关闭,10次大约延时10秒左右,不是很精确,然后关闭ie浏览器进程及子进程
 start iexplore.exe  www.baidu.com ::为了保密,这里没写真正要访问的网站
 ping -n 10 127.0.0.1>nul
 taskkill /f /im iexplore.exe  /t

任务计划在附件——系统工具中,可以“创建基本任务”和“创建任务”,前者比较简单,定时器的最短间隔为1天,后者功能更强大一些,定时器的最短间隔为1分钟。这里我使用“创建任务”,在“常规”中可以设置“只在用户登当运行”或“不管用户是否登录都要运行”,这里设置“不管用户是否登录都要运行”(注:选择该项时,设置完所有参数后会要求输入账户密码,如果账户密码为空,会提示错误,但貌似空密码也有解决办法),配置选与自己电脑的匹配的那项。建立好任务后,当定时器时间到了却没有打开ie浏览器的窗口,再看任务管理器,有进程iexplore.exe,而且网站也的确被访问了(在计划任务运行之前,网站进程是关闭的,而且可以保证该段时间内没有人访问,现在发现网站进程运行中),经过多次设置参数和测试,结果依旧。但如果设置成“只在用户登当运行”,却可以看到定时器到后会打开ie窗口。后来在csdn看到一个帖子,里面有人说如果设置为“不管用户是否登录都要运行”,那程序就后台运行,要想看到交互界面,就要用dos命令at添加任务计划。自己想了想,貌似真的是这样,但知道程序在后台运行了就ok了,看不到界面也无妨,也许这是windows的一个bug吧。

缺点:

1、任务计划的定时器最短间隔为1分钟,如果再短的,就无能为力了,其实即使可以,也不要用这种发http请求的方法去激活网站进程,之前设置每5秒发一次http请求,最后服务器挂了,只能重启,原因也没查出来(后来知道不是因为http请求频繁导致的,至于http请求频繁会不会导致死机,我不清楚。通过事件日志,发现本次死机是因为windows自动更新后重启,电脑是3点多开始重启的,但到9点了还没起来,后打电话问万网的客服,他们说电脑还在关机界面,看来应该是自动更新的问题。让他们重启后,就ok了,然后禁用了自动更新)。

2、关闭ie就意味着关闭所有页面,如果我们这时正在用ie看其它网页,那也会关闭,不过还好,因为是在服务器上,一般没人打开ie。