做为一个系统管理员,我们在管理我们linux主机的时候,经常会要做一些周期性的工作。例如我希望每天将日志文件发邮件给我,每周运行一个我们自己写的脚本等等。当我们需要实现这些工作的时候我们需要使用到acron。还有一种情况,例如我希望过5个小时以后关机,那么我们称这种为一次性的工作,这时我们需要使用到at命令来设置我们的一次性工作。以下我们就来了解一下at工作的机制。

   at命令要运行需要借助于名为atd的守护进程。atd守护进程默认是开启的。我们可以通过ps以及service查看这个守护进程是否启用:

一次性工作at_周期性

配置文件

   /etc/at.allow和/etc/at.deny这个两个配置文件可以限制用户对at的使用。/etc/at.allow设定了那些用户可以使用at,而/etc/at.deny则设定了那些用户不能使用at。并且/etc/at.allow的级别要高于/etc/at.deny。在centos6当中只有/etc/at.deny文件,/etc/at.allow如有需要可以自己生成。每个用户占一行。

   当我们执行了一个一次性的工作以后在/var/spool/at目录当中会产生文件。用cat命令查看可以发现这是一个同你创建at工作所使用的shell一致的shell脚本。其中定义了一大堆的环境变量,最后是你需要执行的动作。一旦一次性的动作被执行以后,这个文件将会销毁。

at命令格式

   at [-mldv] TIME

   选项说明:

       -m:即使没有标准输出的信息也发邮件告诉使用者工作已完成。

       -l:相当于atq,用于查看有那些一次性的工作在运行。

       -d:相当于atrm,用于删除一次性例行工作。at -d 工作号

       -c:后面跟工作号,显示一次性工作的内容,也可以cat /var/spool/at下面的相关文件查看。

       -f:指定所要执行的文件。

   TIME:用于说明at动作在什么时间开始执行。at对于时间的定义是很灵活的。

       HH:MM 例如4:00,表示4点

       HH:MM YYYY-MM-DD 例如4:00 2014-01-10表示2014年1月10日的4点执行。

       也可以用相对时间

       now + 10 [minutes|hours|days|weeks]表示从现在开始过10[分钟|小时|天|周]

   说了那么多,让我们来实际操作一下at。

例1:接上级通知明天上午10点要停电。那我们作为系统管理员可以执行at操作,将一个一次性动作放到后台,届时会自动运行。

一次性工作at_at_02

怎么样so easy吧!注意,最后哪行<EOT>是通过ctrl+d产生的,是ctrl+d不是ctrl+z切记切记。ctrl+d结束录入以后系统还会将你的工作号码告诉你,看到了刚才那个at就是第13个at。我们以后可以at -c查看他的内容。当然了,要查看我们at的内容我们要先知道我们有那些at,他们的工作号码是多少,那我们先来看下at -l或atq吧

一次性工作at_at_03

你看atq相当于at -l的命令别名,两个命令执行的结果都是一样的,是告诉用户我们有那些一次性的工作还没有执行。当我们睡了一觉,忘记昨天做了那些一次性工作,可以用这个命令。如果我们想知道工作的具体内容就需要用到at -c

一次性工作at_周期性_04

上面只是一个开头,我们可以发现我们之前执行的一次性工作成为了一个shell的脚本,并且还继承了我们的环境变量。最后就是我们之前在提示符下输入命令的内容了,以上的内容你也可以通过cat /var/spool/at目录里面的相关管文件看到。

如果我们执行了一次行工作,但是又后悔了,想要删除可以使用atrm job_number。

如果我们要执行的是一个脚本

我们可以使用at -f filename TIME

一次性工作at_周期性_05