2.4.1 单一时刻执行一次任务:at

记得以前上网是需要用电话拨号的,不仅网速慢而且资费贵。有时候想要下载一些好玩的游戏软件,需要耗时很久,坐在那干等让人很着急。虽然随着技术和网速的发展,现在有很多下载工具都会在下载后自动断网或关机,但是当时并没有这些功能,于是我想了一个比较笨的办法,就是预估软件下载完成所需要的时间,然后在时间到了的时候自动关机。比如从现在开始,设置30分钟后自动关机,这时就可以使用at命令。


  1. [root@localhost ~]# at now + 30 minutes
  2. at> sbinshutdown -h now
  3. at> <EOT>
  4. job 1 at 2012-11-06 23:39

其中,第一行是定义从现在开始算,30分钟后安排一个任务;第二行是到了时间后执行关机操作;第三行是个<EOT>,这不是使用键盘输入的,而是使用了组合键Ctrl+D,表示输入结束;第四行是系统提示有一个任务将在23:39被执行。可以使用atq命令查看当前使用at命令调度的任务列表,第一列是任务编号;也可以使用atrm删除已经进入任务队列的任务,再使用atq查询时,发现已经没有任务列表了,如下所示:


  1. [root@localhost ~]# atq
  2. 1 2012-11-06 23:39 a root #
  3. 查询at
  4. 的任务队列,第一个数字代表该任务的标号
  5. [root@localhost ~]# atrm 1 #
  6. 删除标号为1
  7. 的任务

使用at还可以安排在具体的时间执行任务,比如说在午夜12点实现自动关机,如下所示:


  1. [root@localhost ~]# at 00:00 2012-11-07
  2. at> sbinshutdown -h now
  3. at> <EOT>
  4. job 2 at 2012-11-07 00:00
  5. [root@localhost ~]# atq
  6. 2 2012-11-07 00:00 a root

默认情况下,所有用户都可以使用at命令来调度自己的任务,如果由于特殊的原因需要禁止某些用户使用这个功能,可以将该用户的用户名添加至/etc/at.deny中。