天天看点

『学了就忘』Linux系统定时任务 — 87、只执行一次的定时任务

目录

1、at服务管理

2、at命令的访问控制

3、at命令

4、其他at管理命令

5、总结

定时任务是在服务器上常用到的一个工作。

在你指定的时间,系统会自动执行你指定的程序(脚本或者命令)。

Linxu系统中的定时任务不难,关键是如何写出正确的脚本。

在Linxu系统中,有三种用于任务调度的工具:

<code>at</code>命令调用<code>atd</code>服务

<code>crontab</code>命令调用<code>cron(crond)</code>服务。

<code>anacron</code>工具。

只执行一次的定时任务需使用<code>at</code>命令。

<code>at</code>命令是一次性执行的定时任务。也就是说我在之后什么时间点,执行一次任务。

<code>at</code>命令要想正确执行,需要<code>atd</code>服务的支持。

<code>atd</code>服务是独立的服务,所以启动的命令如下:

提示: 只要你的Linux系统是安装的,哪怕是最小化安装,<code>at</code>命令和<code>cron</code>命令默认都是启动的。 我们发现大多数服务最后都有个<code>d</code>,这个<code>d</code>代表<code>Daemon</code>(守护进程)的意思。

如果想要让<code>atd</code>服务开机时自动启动,可以设置如下命令:

<code>atd</code>服务启动之后,<code>at</code>命令才可以正常使用,我们还要学习下<code>at</code>命令的访问控制。

这里的访问控制指的是允许哪些用户使用<code>at</code>命令设定定时任务,或者不允许哪些用户使用<code>at</code>命令。

大家可以想象成为设定黑名单或设定白名单,这样更容易理解。<code>at</code>的访问控制是依靠<code>/etc/at.allow</code>文件(白名单)和<code>/etc/at.deny</code>文件(黑名单)这两个文件来实现的。

注意:Linux系统中默认是没有<code>/etc/at.allow</code>文件的,用到的时候需要自己手动创建。

具体规则如下:

如果系统中有<code>/etc/at.allow</code>文件,那么只有写入<code>/etc/at.allow</code>文件(白名单)中的用户可以使用<code>at</code>命令,其他用户不能使用<code>at</code>命令(<code>/etc/at.deny</code>文件会被忽略,也就是说同一个用户既写入<code>/etc/at.allow</code>文件,也写入<code>/etc/at.deny</code>文件,那么这个用户是可以使用<code>at</code>命令的,因为<code>/etc/at.allow</code>文件优先级更高。)。

如果系统中没有<code>/etc/at.allow</code>文件,只有<code>/etc/at.deny</code>文件,那么写入<code>/etc/at.deny</code>文件(黑名单)中的用户不能使用<code>at</code>命令,其他用户可以使用<code>at</code>命令。不过这个文件对<code>root</code>用户不生效。

如果系统中这两个文件都不存在,那么只有<code>root</code>用户可以使用<code>at</code>命令。

系统中默认时只有<code>/etc/at.deny</code>文件,而且这个文件是空的,这样的话系统中所有的用户都可以使用<code>at</code>命令。不过如果我们打算控制用户的<code>at</code>命令权限,把用户写入<code>/etc/at.deny</code>文件即可。

<code>/etc/at.allow</code>文件的权限更高,如果<code>/etc/at.allow</code>文件存在,则<code>/etc/at.deny</code>文件失效。

<code>/etc/at.allow</code>管理行为更加严格,因为只有写入这个文件的用户才能使用<code>at</code>命令,如果需要禁用<code>at</code>命令的用户较多,则可以把少数用户写入这个文件。

<code>/etc/at.deny</code>文件的管理较为松散,如果允许使用<code>at</code>命令的用户较多,则可以把禁用的用户写入这个文件。

不过这两个文件都不能对<code>root</code>用户生效。

格式如下:

<code>at</code>命令只要指定正确的时间,就可以输入需要在指定时间执行的命令了.这个命令可以是系统令,也可以是shell脚本。(也就是说确认命令的执行时间之后,按回车在输入你要执行的命令。)

示例:

查询指定的定时任务:

我们可以通过下面的<code>atq</code>命令查看到,Linux系统中<code>at</code>任务列表中,你所需要任务的工作号,然后在通过<code>at -c (工作号)</code>命令来查看一个<code>at</code>任务的具体内容。

在一个at任务中执行多个系统命令:

<code>at</code>还有查询(<code>atq</code>)命令和删除(<code>atrm</code>)命令。

命令如下:

<code>at</code>命令平时用的并不多,因为<code>at</code>任务只能够执行一次任务。