关闭时自动重启应用


10

我有一个服务器应用程序,无论计算机何时运行,我都希望它运行,通常是这种情况,除非有时我会发现它已自行关闭。

是否可以运行蝙蝠或脚本来监视应用程序,并在关闭后重新启动它?


什么类型的应用程序,通常如何启动?作为服务,是作为运行命令在注册表中,还是在启动文件夹中?
KCotreau

注册表运行命令。带有“-开始”选项。
Sid

如果在应用程序已经运行的情况下再次运行该命令,当前会发生什么?
KCotreau

没有。该命令识别出该应用程序已在运行。
Sid

Answers:


12

这并不总是可行的(它取决于程序如何加载自身),但是通常您可以创建一个批处理文件,如下所示:

@Echo off
:Start
NotePad
echo Program terminated at %Date% %Time% with Error %ErrorLevel% >> c:\logs\program.log 
echo Press Ctrl-C if you don't want to restart automatically
ping -n 10 localhost

goto Start

我以记事本为例。

线

echo Press Ctrl-C if you don't want to restart automatically
ping -n 10 localhost

只是一个延迟(10秒),使用户有机会中止该过程,然后再次启动。

线

echo Program terminated at %Date% %Time% with Error %ErrorLevel% >> c:\logs\program.log 

不需要,但是在程序每次关闭文件时都会记录日志,因此对诊断问题可能很有用。ErrorLevel可能不会告诉您太多信息,但是如果程序正常关闭,则应该返回0,否则返回0。 -零消息(如果没有)

注意,您提到您的程序如果已经运行则不会执行任何操作。这通常意味着应用程序启动,检测到另一个副本已在运行并立即关闭。如果真是这样,并且您的程序在启动此批处理文件之前已运行,则该批处理将循环运行,并尝试每十秒钟启动一次程序。


“然后该批处理将循环运行,并尝试每十秒钟启动一次程序。” 这是坏事吗?
posfan12年

谢谢!!在凌晨12:52进行一些复制和粘贴,我可以入睡而不必担心(早上太多)会发现(或找不到)什么。嗯 在睡觉后的早晨。
Spike0xff

2

根据上面的回答,我建议您将该命令放入批处理文件中,然后将该批处理文件设置为每分钟作为计划任务运行。几乎没有与此相关的开销,并且它确保您的流程得到声明,无论您是否打算停止它都可以。


尽管快速,但这却使我感到笨拙且效率低下。为了达到同样的目的,也许有更合适的方法吗?谢谢你的帮助!!!
Sid

正如我所说的,Sid的开销非常小,而且很容易做到。如果您想找到一种方法来编码某些东西,以检查它是否正在运行,然后重新启动它,请放心,但是我这样做已经很长时间了,并且取得了积极的成果。当您的应用程序(通常在服务器上)停止运行时,这是一种常用方法。
KCotreau

到目前为止,最简单的方法。而且没有开销。
surfasb

2

我想这个问题的正确答案取决于您为什么要这样做。您是否要解决意外关机的问题?防止机器用户(例如关闭监视软件的员工)随意地“恶意”关闭?防止严重和熟练的恶意攻击?您是否正在尝试自己编写恶意软件(在这种情况下,请删除;-))?

另外,正如其他评论者所提到的,如果您编写了Windows服务,则情况会有所不同(例如)

就个人而言,我可能首先编写另一个应用程序,然后以相同的方式启动它。让两个应用程序定期相互扫描并在必要时重新启动-确保您提供了一种简单的方法来使应用程序合法关闭!

话虽如此,并考虑到您的评论“有时我会发现它本身已经关闭”,所以实际上我将首先尝试找出其关闭的原因...


我使用计算机作为媒体服务器,而有问题的应用程序是mediaserver.exe。没有恶意。我无法预见到我希望该应用程序关闭的任何情况,但是如果我愿意,没有理由我不能先停止脚本或bat。另外,我不具备编写软件的能力,但是熟悉bat文件。即我是菜鸟。
Sid

不好意思-我以为我是“程序员”小组的成员,并且您自己编写了该应用程序:-)听起来很笨拙,我建议使用@KCotreau描述的“计划任务”方法
Steve Mallam


-1

这样更好!这是我用于防雷游戏服务器的一些代码,应保存在.bat文件中

@echo off
rem This is a comment line
rem This one is a comment too
rem Following line ensures the working directory is searched in C:
C:
rem Join the correct directory, where the server stuff lies in:
cd "C:\Users\morenavaj\Documents\minetest-0.4.16-win64 - Lone_Wolf\"
:love_spaghetti_code
bin\server.lnk --config minetest.conf ^
            --worldname "Land of Blockheads" ^
            --gameid minetest_game ^
            --port 30000 ^
            --logfile bin/debug.txt

echo Restarting server....
goto love_spaghetti_code

echo Done (this should never, ever, happen)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.