在 Windows Scheduler 中永久运行任务,如果不运行则重新启动

在 Windows Scheduler 中永久运行任务,如果不运行则重新启动

关于 Windows 的任务计划程序接收脚本返回代码的能力,存在很多歧义。我找到了几个有用的 Stack Exchange 答案,但没有一个完全符合我的需要。

我正在为 Windows 7 进行开发。

在 Scheduler 中,我设置了一个在登录时运行的任务。它所做的就是myscript.py在虚拟环境中调用 Python 脚本。因此操作如下所示:

程序:(PATH\\TO\\pythonw.exepythonw隐藏窗口中运行)

参数:Path\\TO\\myscript.py

现在这myscript.py是一个“永远运行的脚本”:

bot = Bot(os.getenv("TOKEN", None))
bot.run()

run()基本上是一种轮询机制,只要没有发生异常,它就永远不会存在。这就是为什么当我在 Scheduler 中触发我的任务时,它总是显示为“正在运行”(这是一种好的做法吗?)

这就让我想到了一个问题:如果该任务存在,我该如何告诉任务计划程序重新启动该任务?基本上,无论如何,都要确保该脚本的一个(且只有一个)实例始终在运行。

答案1

如果您最终没有得到有关仅使用 Windows 任务计划程序执行此操作的答案,那么一种简单的方法就是使用 AutoHotkey。

您的 .ahk 文件将如下所示,然后您将使用计划任务启动 ahk 脚本。请注意,pythonw.exe 可能需要是 python.exe,或者可能是 py.exe - 检查任务管理器以查看脚本运行时它是什么(根据您的描述,我认为可能是 pythonw.exe)。请注意,这假设您不会使用 pythonw / python 运行任何其他脚本。如果您运行此脚本,它将终止其自身和 pythonw.exe 的任何其他实例,然后它将启动您的脚本。它还将循环运行以监视您的脚本是否关闭,然后它将再次启动它。

#SingleInstance force
IfWinExist, ahk_exe pythonw.exe
WinKill, ahk_exe pythonw.exe
Launch:
;may want to call SetWorkingDir here or else pass as an argument to the below command
Run, PATH\\TO\\pythonw.exe Path\\TO\\myscript.py
Sleep, 5000
WinWaitClose, ahk_exe pythonw.exe
Sleep, 5000
Goto, Launch

相关内容