我无法安排我写的任务。
基本上,我创建了一个.bat
执行 R 脚本的文件 ( script.R
)。当我双击该.bar
文件时,它就会被执行。我可以看到结果文件以及某种日志文件script.Rout
。
当我尝试运行调度程序中的所有程序时,我遇到了问题。当我单击Run
运行我的任务时,该任务在History
选项卡中生成多个条目,显示我的任务开始并在同一秒结束。所以基本上什么都没有执行。
在哪里可以检查出现的问题?我的脚本写入了一些位于此.Rout
文件中的输出,但这些输出不是由任务计划程序创建的。
我已经将我的用户添加到策略设置中来安排任务,并且通过编辑任务,Windows 不会抱怨,我认为这不是问题。
希望得到一些帮助来找出问题所在。
编辑:
我现在意识到,只要我不选择,我的任务就会运行Execute task whether user is logged in or not
。如果我切换到此设置,我的脚本就不会执行。可能存在一些安全问题吗?
答案1
任务计划程序计划的批处理脚本未运行检查
任务计划程序属性...
从 WindowsTask Scheduler
开始properties (见最底部的屏幕截图)在里面。 。 。
1. General选项卡,确保以下选项被选中/选中或取消选中,如图所示打印屏幕A
- 取消选中
Run only when user is logged on
- 查看
Run whether user is logged on or not
- 查看
Run with the highest privileges
- 取消选中
2. Conditions选项卡,确保以下选项选择,已检查, 或者未选中正如所示打印屏幕B
- 查看
Wake the computer to run this task
- 查看
3. Actions选项卡,点击Edit,并确保设置
Start in (optional)
如下例所示(不要用双引号括起来)表示批处理脚本所在位置的完整路径没有最后一个反斜杠“\
”打印屏幕 C
安全注意事项
一旦您按下OK(2.上面)它会提示你输入运行此命令所需的凭证,而这个凭证就是需要访问
EXECUTE
批处理文件所在的位置,并且它还需要访问权限才能执行您编写的批处理文件所运行的任何内容。最好为该进程设置一个静态服务/代理用户帐户,然后使用其凭据来运行该进程。您需要确保其密码强且设置为永不过期——并且它需要访问
EXECUTE
批处理并运行批处理脚本进程正在运行的任何命令和资源等。它也利用了。看来
Run whether user is logged on or not
您必须检查该选项Run with highest privileges
才能真正按照任务计划程序的预期运行。
错误检查
如果实际的批处理脚本存在问题,但 Windows任务计划程序实际上确实执行了它来运行它,但是批处理脚本逻辑出错了,等等,无论出于什么原因,任务计划程序可能在这个级别看不到此故障。从它的角度来看(大多数情况下默认),它正在执行批处理文件,因此只要它可以执行并且有权执行,它的工作就算成功完成。
添加错误检查或者日志记录批处理脚本逻辑抓住(或者排除故障) 这一级别的问题包括确保批处理调度程序执行它的安全上下文对批处理脚本运行时的命令、资源等具有适当的访问权限。
组策略注意事项
回答: 在 Windows 上,此权限是通过当地的或者域安全策略. 要执行此操作,请使用本地安全策略, 按着这些次序。
- 在里面控制面板, 打开管理工具, 然后本地安全 政策。
- 下面安全设定, 打开当地政策并突出显示用户权限分配。
- 定位作为批处理作业登录。 打开特性并添加任何需要此权限的用户。
- 等结束了,节省您的更改并关闭本地安全设置窗户。
您的更改应立即生效。要更改域安全策略,请在域控制器上使用域安全策略实用程序在里面控制面板
具有映射驱动器或完整 UNC 路径的批处理脚本逻辑以及问题。...
如果您的脚本引用了映射的网络驱动器但您希望它这样做Run whether the user is logged on or not
,那么在这种情况下,驱动器映射可能实际上并不适合批处理过程执行预期的操作。
如果可能,请UNC
在批处理脚本逻辑中使用路径而不是映射驱动器号以避免出现问题。否则,您可能需要PUSHD \\ServerName\ShareName
在批处理开始时使用,然后POPD
在批处理结束时使用。您可以NET USE X: \\ServerName\ShareName
在批处理开始时使用映射驱动器,然后NET USE X: /DELETE
在批处理结束时使用断开驱动器。
其他的
打印屏幕
打印屏幕A
打印屏幕B
打印屏幕 C