周期性任务计划

    为什么会有周期性任务计划呢?举个例子,你是某公司的管理员,在某些特定的场景下你需要在凌晨两点执行某个特定的任务,试想一下你可能会再机房里蹲到两点么去执行么?再比如说你们公司需要在每天的凌晨两点做一次系统的备份,你可能每天两点到机房里操作么?显然你不想这么做,这时候我们就可以通过任务计划来帮你实现。

我们可以使用atbatch来执行一次性的某个任务,at可已接受的时间方式有很多种,你可以使用绝对时间,也可以使用相对时间,甚至可以使用模糊时间,废话不说,我们俩解释一下at的使用。比如我们需要在从现在开始2分钟以后执行ls /tmp 并且echo "I can use at"。我们直接输入at now+2min回车,输入命令后按Ctrl+D跳出,这样at命令就执行成功,3分钟后命令会执行,并发送一分邮件给自己。

我们可以使用at-l或者atq查看尚未执行的任务命令

 

我们可以使用mail命令查看刚的任务计划已将执行

 

有时我们也希望取消掉某个已经定义的计划,我们可以使用at-r 加任务编号或者atrm 删除特定的尚未执行的任务计划 

 

有时我们需要一次执行多个命令,我们可把打算执行的命令写在一个文件当中,然后使用at -f 指定文件即可。例如我希望我文档myat里的所有命令可以在7天后自动执行,我们可以这样写“at -f  myat.txt now+7days”即可

那么batch怎么使用呢?其实batchat的用法一样,但是batch不用指定时间,他会在系统空闲时执行。平时我们很少用到batch

如果我们需要周期性的任务计划我们该怎么办呢?比如每天执行某个操作。周期性任务计划是借助周期性服务守护进程来实现,这个服务叫做crond。我们怎么进行周期性计划呢?其实在系统定义里两个周期性任务,一个是系统周期性任务,一个是用户周期性任务。系统周期性任务的配置文件保存在/etc/crnontab,,用户周期性任务/var/spool/cron/USERNAME

我们看一下/etc/crnontab

 

其中前5段表示时间,第6段表示以哪个用户的身份运行,第7个字段表示命令。前五段第一段表示分钟,取值范围0-59,第二段表示小时,取值范围0-23,第三段表示天,取值范围1-31,第四段表示月,取值范围1-12,第五段表示周,取值范围0-7,“*”表示任意值“,”表示或,“-”表示几到几,“/”表示每。

用户周期性任务和系统周期性任务类似,只不过没有第6段,默认以用户自身权限执行。

用户也可以使用crontab命令来实现,-u 指定某个用户 -e定义自己的敲击crontab -u 回车后打开vim编辑器编辑保存退出即可,我们可以使用crontab -r 移除用户定义的任务计划

但是有个缺陷是,如果在某个定义周期性计划的时间我们的计算机关机周期性计划是不会默认在你开机后执行这个操作的,知道下一个命令执行的时间并且机器没有关机命令才能执行,我们能不能实现某个计划任务需要执行时计算机关机但是下次启动后该计划自动执行呢?我们可以使用anacron来实现anacron,仅仅是crontab补充,不是crontab的替代品,常常我们在家用电脑或者笔记本上使用。anacron使用如下。Anacron配置文件在/etc/anacrontab