迹忆博客
当前位置: 主页 > 学无止境 > 操作系统 > 文章

Linux命令at 的使用——设置时间仅执行一次命令

发布时间: 2016-04-29 作者: 迹忆 浏览次数:

本篇主要涉及到一个知识点就是atd服务。与此服务类似的还有事crond服务。这两个服务的作用我们可以和javascript的两个功能函数做一个类似。学过javascript的都知道,在javascript中有setInterval 和 setTimeout 这两个函数。

setInterval函数的作用是循环执行代码,可以设定间隔时间。这个函数就类似于我们这里要说的crond的作用。

setTimeout函数的作用是延时多长时间执行代码,执行完成以后就不再执行了。这个函数就类似于我们接下来要说的atd的作用。

对于crond和atd这是两个服务,我们使用的时候是使用它们对应的命令,分别为crontab和at。

atd服务开启

at是可以执行一次指定的命令就结束进程的命令。如果需要at的执行需要我们开启atd服务,一般linux系统默认是带有atd服务的。开启的命令也很简单。

# service atd start
//或者使用下面的命令
# /etc/init.d/atd start

at的运行方式

其实at的工作方式就是将要执行的命令所对应的进程排进自己的进程表中。当我们使用at命令来产生要运行的工作的时候,at会将这个工作以文档的形式存储在/var/spool/atd/目录内,然后改工作就会等待atd服务进程的调用执行了。

一般情况下,为了服务器的安全,需要对用户设置权限。并不是所有的用户都可以进行at工作。我们可以利用/etc/at.allow 和 /etc/at.deny 两个文件来进行at的使用限制。

/etc/at.allow 将允许使用at的用户写入该文件,在这个文件中的用户有使用at的权限。当然不在这个文件中的用户就没有使用at的权限。

/etc/at.deny 将不允许使用at的用户写入该文件,在这个文件中的用户没有使用at的权限。当然不在这个文件中的用户就有使用at的权限。

当然atd的进程是这样工作的。在一个用户要使用at的时候,会先去找寻/etc/at.allow,该用户如果在这个文件中就允许其使用at,如果不在就不允许使用at。如果/etc/at.allow不存在,就回去找寻/etc/at.deny文件,如果用户不在这个文件中同样也允许其使用at。当然如果两个文件都不存在则默认只有root用户可以使用at了。也就是说,即使这两个文件同时存在也有个优先级,atd进程会优先考虑/etc/at.allow文件。

在一般的linux版本中,由于假设系统上的所有的用户都是可以被信任的,所以说系统通常会保留一个空的/etc/at.deny文件。

at命令格式

at命令非常简单,其基本格式如下

# at [选项]  Time
可用选项:
 -c : 列出后面接的实际命令的内容。
 -l : at –l 列出目前系统上该使用者的所有的at工作例程。
 -d : 可以取消一个在at例程中的工作。
 -m : 当at工作完成以后,用email通知该使用者工作已经完成。
 -v :列出at的工作例程的详细信息。
Time : 时间格式。定义什么时候进行这项工作。
         HH:MM 几时几分,在今天的HH:MM时刻进行这项工作。
         HH:MM YYYY-MM-DD 在某年某月某天的某时某分进行这项工作
         HH:MM[am|pm] [Month] [Date]    同上,强制在某年某月某日的某时刻进行!
       HH:MM[am|pm] + number [minutes|hours|days|weeks]
         就是说,在某个时间点『再加几个时间后』才进行。

好了,我们下面看一个例子。从现在开始3分钟以后删除/tmp目录下的文件。

# at now + 3 minutes  //这里该回车了
at> rm –rf /tmp/*
at> //这里需要按下 ctrl+d

这样在我们等待3分钟以后就会发现/tmp目录下面已经空了。

在命令没有执行之前,如果我们不想执行该工作命令了,我们可以将其删除。这里我们可以借助两个命令 atq 和 atrm。

atq 相当于 at –l 查看at的所有工作序号。我们可以选择其中一个删除

atrm 相当于 at –d 删除指定的工作,后面接工作的序号。

使用如下

# atq
7       2016-04-29 15:53 a root
//或者使用 at –l
# at –l
7       2016-04-29 15:53 a root

我们看到,工作的序号为7。下面我们就可以使用 atrm 或者 at –d 来删除该工作了

# atrm 7
// 或者
# at –d 7

然后我们在查看的时候就发现该项工作已经没有了。

好了,对于at命令后面的其他的参数选项大家可以自己试着使用,看其显示结果。这样对我们对at的使用有很好的帮助。

希望本文对大家有所帮助。

除非注明转载,本站文章均为原创,欢迎转载,转载请以链接形式注明出处

本文地址: