现在的位置: 首页 > 综合 > 正文

计划任务解说

2014年02月12日 ⁄ 综合 ⁄ 共 4359字 ⁄ 字号 评论关闭


计划任务解说

1.AT命令与计划任务的区别

  我们在建立计划任务时,一般可以使用两种方法:控制面板中的任务计划、at命令。那这两种方法是不是完全相同呢,还是有什么区别?再有2000系统中有一个task scheduler服务,那这两种方法与task scheduler服务又是什么关系呢?今天闲来无事,专门研究了一下。

首先在task scheduler服务启动的情况下,分别使用控制面板|任务计划和at命令建立计划任务,让它运行附件中的计算机程序(calc.exe)。建立成功后,可以在控制面板|任务计划中看到两个任务,其中一个名字为at1,也就是at命令建立的任务了。然后在命令行方式下不带参数运行at命令,让它列出所有任务,结果只能看到at1这个任务,而使用控制面板|任务计划建立的任务是看不到的。在控制面板|任务计划中双击at1,发现是可以编辑的,修改了它的运行计划,保存退出。然后再运行at命令,发现任务清单变成空的了。再有一个现象就是使用控制面板|任务计划创建的任务可以看到它成功的运行,而at命令建立的任务的运行却没有看到。难道at命令没有运行成功?利用at命令重新建了一个任务,发现还是没有结果。最后,打开任务管理器,在进程中发现已经有两个calc.exe了。再查帮助,原来at命令建立的任务就是后台运行的。再有,任务是存储在%systemroot%/tasks文件夹中的,默认的扩展名为.job

然后,停止task scheduler服务。再使用at命令创建任务,发现已经无法创建任务,系统提示服务仍未启动。而使用控制面板|任务计划却可以创建成功,难道它不需要 task scheduler服务?到服务中查看一下,却发现task scheduler服务已经启动了。原来控制面板|任务计划是可以自动启动task scheduler服务的。把task scheduler服务启动方式设置为手动,并且停止服务,再使用控制面板|任务计划创建任务,发现仍然可以成功,并且task scheduler服务又一次被启动了。把task scheduler服务设置为禁用并停止后,控制面板|任务计划终于也无法成功了。

经过以上的试验,得出最后的结论:控制面板中的任务计划和at命令都是依赖于task scheduler服务的,不过任务计划可以自动启动task scheduler服务(除非设为禁用),而at命令无法自动启动服务;两种方法建立的任务均可以在控制面板|任务计划中看到并且编辑,都会生成.job 文件,但使用at命令却只能看到用命令建立的任务;使用at命令建立的任务一经任务计划的编辑,就无法使用at命令查看和编辑了;任务计划建立的任务的运行是前台的,而at命令建立的任务的运行是后台的。

2.无法启动计划任务的解决方法

这有两种可能,一是系统中的“Task Scheduler”服务没有启动,你可在运行中键入“services.msc”,查看“Task Scheduler”服务是否被设置成了已禁用,若是,只要双击它将启动类型改为自动,重新设定一个计划任务就可以执行了。

如果你当前账户设置了自动登录,而其登录密码又为空,也有可能导致任务计划不能按时执行,在XP专业版中,需要运行“gpedit.msc”来编辑 组策略:展开计算机配置→Windows设置安全设置本地计算机策略安全选项;双击右侧的账户:使用空白密码的本地账户只允许进行控制台登录项,在弹出对话框中选择已禁用

3.回味DOS

 WINDOWS已经进化到 VISTA 的今天,想必已经很少人会记得我们还有一个老朋友,名字叫做DOS。记得以前用286-386的时候,还没有图形界面的操作系统,PC电脑对于绝大多数人来说就是DOS

其实我也是很长时间没有碰过DOS了,虽然偶尔也会用一下命令行模式,但是目的也仅限于查看IP和检查网络是否通畅。幸运的是最近在处理一些文件发布方面的事情的时候,苦于不停地CTRL+C – CTRL+V 然后还要修改名字,而且还需要把数千个文件发布到二十几台服务器的烦恼,不得不再一次祭出这个老法宝,多亏这位DOS老朋友宝刀不老,帮我解决了大麻烦了。

转念一想,也许并非我一个人这么幸运碰到这样变态的发布工作,于是把这几天用到的一些DOS方面的命令记录下来,给和我同样幸运的忍受发布文件工作的同胞们提供另外一个解脱的途径。

顺带的说一句,我这里说的DOS其实和原来的DOS已经有很大的差别,所以我后面说的DOS其实都是WINDOW里面的命令行工具,为了说起来方便,叫着也顺口,就直接说DOS了。我后面的用词上面 DOS=命令行=COMMAND

1       创建时间戳目录

我 先说一下我为什么需要创建时间戳目录。其实是这样的,我需要把一个网站发布到二十几台服务器上面。在做更新的时候,也要求同时更新。大家做过更新工作的就会知道,难免会发生错误或者客户的要求突然改变,需要恢复到以前的版本。怎么办呢?好办啊,更新之前把老的版本备份一次嘛。对了,就是这样,我把需要更新的部分先复制到一个用时间作为名称的目录,所以这个目录是即时创建。这个时候就用到了创建时间戳目录这个方法(当然了,大哥你时间充裕并且服务器允许的话,你用VC/VB/C#/JAVA什么的写一个用来备份和同步的AP丢上服务器我自然没话说,只是我这边的情况不允许)。下面我就来说一下我怎么操作的。

1.1 获取日期和时间

大家应该知道在命令行的模式下,获取日期的方法是这样子

C:>DATE

当前日期:2006-07-27 星期四

而获取时间的方法则是

C:>TIME

当前时间:17:55:30.63

1.2 获取时间戳

可是上面的得到的是时间和日期,并不时在MD的时候所需要的字符串,怎么解决呢?DOS下面有一个转换成字符串的方法:

u       %变量%

这样子就是表示取变量的值转换到字符串。

不过%DATE%%TIME%取出来依然并非我需要的字符串。我预期的时间戳格式是这样的 YYYYMMDDHHMMSS 例如20060727175530 这样子。因此我们还需要处理一下这个字符串。在命令行里面我们可以通过

u       %变量名:~起始位置,长度%

这样的格式来取得字符串中特定位置的子串。

例如:

%DATE:~0,4%   得到  2006
%DATE:~5,2%  
得到 07
%DATE:~8,2%  
得到 27

现在简单了,得到我需要的字符串,下面这样操作就可以了

u       %DATE:~0,4%%DATE:~5,2%%DATE:~8,2%%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%

创间时间戳目录

好了,目录名都已经出来了,还有什么困扰呢,呵呵呵,组合上我们亲爱的MD命令,就搞定了,大家可以试试看

MD %DATE:~0,4%%DATE:~5,2%%DATE:~8,2%%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%

2       管理WINDOWS服务

接下来我和大家分享一下如何用命令行来管理WINDOW服务

因为我是用.NET写程序的,所以我这边描述的是怎样用DOS安装.NET开发的WINDOWS服务其他的语言编写的WINDOWS服务我没有安装过,不过我相信应该也有相应的办法来安装。

其实我会想到要用命令行来控制WINDOWS服务,起因是我的笔记本性能不够好,平时我要玩游戏(例如WOW)的时候,总是会要打开WINDOWS的服务管理器来关闭大约十几个服务,释放一些内存,以便让我的笔记本运行WOW的时候比较流畅,后来觉得每次都这么干真的是很麻烦,索性写了一个批处理,每次玩WOW的时候只要双击一下,所有需要关闭的服务就依次关闭了,再也不用打开服务管理器去一个个的找出来关闭了。希望和我有同样需要的朋友能从这里得到一点帮助,嘿嘿。那我们就开始吧

2.1 关闭服务

命令格式如后:NET STOP 服务名称

有朋友就会问了,服务名称是什么东西呢?简单!打开服务管理器,第一列就是服务名称了,COPY过来就好了。

2.2 启动服务

好了,介绍了关闭,咱自然还得打开,成天打WOW自然是惬意,可是不工作没饭吃呀。要重新启动那些服务,你要是不嫌麻烦,可以选择重新启动计算机,也可以打开服务管理器逐个找出来启动。废话不多说,我们还是推荐用命令行批处理。

现在就说如何启动WINDOW服务

命令如后:NET START 服务名称

把你刚才写在关闭服务的那个BAT文件里面的所有服务名称都COPY过来吧。要不然把 STOP 替换成 START 然后另存为,也是一个不错的偷懒方法,既然目的就是偷懒,索性将偷懒进行到底~~

2.3 安装服务

有了关有了开,我们现在再提一下如何安装.NET开发的WINDOW服务。前面废话说太多了,这里就不多说废话了,直接把我现在使用的BAT文件内容贴出来,大家参考着自己写就可以了,其实蛮容易的。

//新建目录

MD %SYSTEMROOT%/XXX/

//拷贝文件

COPY *.* %SYSTEMROOT%/XXX/

//这句最重要,这是安装服务

%SYSTEMROOT%/MICROSOFT.NET/FRAMEWORK/V1.1.4322/INSTALLUTIL.EXE %SYSTEMROOT%/XXXX/MYSERVICE.EXE

//安装好了以后启动服务

NET START MYSERVICE

//退出命令行状态

EXIT

 2.4 重新启动服务

NET STOP MYSERVICE

NET START MYSERVICE

EXIT

 2.5 卸载服务

 //卸载之前一定要先停止服务
NET STOP MYSERVICE
//
卸载服务,其实语句和安装服务很类似,只是多一个 /U 参数
%SYSTEMROOT%/MICROSOFT.NET/FRAMEWORK/V1.1.4322/INSTALLUTIL.EXE /U %SYSTEMROOT%/XXX/MYSERVICE.EXE
//
删除文件,如果是删除文件夹的话,请使用DELTREE
DEL %SYSTEMROOT%/XXX /Q
//
退出命令行状态
EXIT

3     自动确认删除

删除命令常用的是DEL DELTREE

DEL FILEPATH /P   是自动确认删除文件

DELTREE /Y FOLDERPATH 是自动确认删除文件夹

还有一种方法,可以通过文本文件把参数传入命令例如下面这个

DEL D:/AAA/*.* < C:/A.TXT  这样的话在A.TXT里面写一个Y然后一个回车就能自动的输入Y

这种方法不仅限于自动确认删除,在很多需要输入参数的地方都很好用。

 

应用举例:按月备份oracle数据库,数据是最新的。

1.    建立批处理文件: exp 用户名/密码@服务名 d/%DATE:~5,2%.tmp

2.    添加计划任务,每天执行。

抱歉!评论已关闭.