【发布时间】:2018-11-18 07:27:36
【问题描述】:
我每天都在尝试运行一个自动化的 powershell 脚本。但是我在让它持续可靠地运行时遇到了问题,脚本本身运行良好,它让 Windows 调度程序持续运行,这就是问题所在。
脚本在每天凌晨 1 点由 Windows 调度程序调用为 powershell.exe,并带有命令参数:
-windowstyle Normal -NoExit -file "d:\work\PwrShellScripts\FlmToDb_010.ps1"
一旦被调用,脚本将持续运行到晚上 11 点,然后退出。
脚本本身工作可靠,但调度只工作十分之九,偶尔会失败并出现错误:
任务计划程序未启动任务“\DailyFlm”,因为同一任务的实例“{aa18e048-d8b2-4e16-8737-fc7babbb609e}”已在运行。
问题是,如何让脚本每天可靠运行?
其他可能相关的信息......
-windowstyle Normal -NoExit 参数表示 powershell 脚本在命令窗口中运行(而不是作为后台进程),如果会话结束,窗口将保持打开状态。
这样做有两个原因,首先,它提供进程实际运行的视觉指示,其次,如果进程失败,它允许检查错误消息。 powershell 脚本不包含任何文件日志记录,因此在命令提示符下运行它还可以让我确认前几天的会话在停止时干净退出。
其中一个问题是,由于该过程 90% 的时间都有效,如果我进行任何调整,我必须等待 10 天或更长时间才能确认它们是否真的有效!
我怀疑这个问题可能与脚本退出时控制台保持打开 (-NoExit) 的事实有关。大多数情况下,windows 似乎都认识到虽然控制台仍然打开,但相关的脚本已经退出。
我的猜测是,有时它会决定,由于控制台已打开,因此进程仍在运行。我无法发现日程安排正常的情况和不正常的情况之间的任何区别。
有什么建议吗?
更新... 调度程序平均每 10 天启动一次作业失败。我更愿意让脚本在前台运行,这样可以更轻松地监控它的进度,并且如果它确实失败了也会很明显。
【问题讨论】:
-
嗨 - 它是否每 10 天就失败一次?还是平均每 10 天一次?您是否尝试过您的计划任务 -> 设置选项卡 -> 页面底部 -> “如果任务正在运行 - 以下适用” -> 更改该选项?
-
我建议添加日志记录,以便脚本可以在后台运行(像start-transcript 这样的基本功能甚至可能会这样做),以及错误处理,以便在失败时提醒您。跨度>
-
我还建议配置任务以在下一个计划开始之前终止脚本。
-
> "
the same task is already running." 脚本在运行时可能会做它应该做的事情,但是有一个缺陷......它没有正确关闭。
标签: windows powershell scheduled-tasks scheduling