要想使用at命令,读者需提早安装好at软件包以root登录linux系统则当前的工作目录是什么,并开启atd服务。为此,首先来瞧瞧怎么安装at软件包。
在Linux系统中,查看at软件包是否已安装,可以使用rpm-q命令,如下所示:
[root@localhost~]#rpm-qat
at-3.1.13-20.el7x86_64
可以看见,当前系统早已安装at软件包,若读者所用系统未安装linux系统官网,可使用如下命令进行安装:
[root@localhost~]#yum-yinstallat
#省略输出信息,最终出现Complete!,证明安装成功。
除此之外,at命令要想正确执行,还须要atd服务的支持。atd服务是独立的服务,启动的命令如下:
[root@localhost~]#serviceatdstart
正在启动atd:[确定]
假如想让atd服务开机时自启动,则可以使用如下命令:
[root@localhost~]#chkconfigatdon
其实,独立服务的自启动也可以更改/etc/rc.local配置文件,具体如何做看个人习惯。
安装好at软件包并开启atd服务以后,at命令才可以正常使用,不过在此之前,我们还要学习一下at命令的访问控制。
访问控制指的是容许什么用户使用at命令设定定时任务,或则不容许什么用户使用at命令。你们可以将其想像成设定黑名单或白名单,这样更容易理解。
at命令的访问控制是借助/etc/at.allow(白名单)和/etc/at.deny(黑名单)这两个文件来实现的,具体规则如下:
系统中默认只有/etc/at.deny文件,但是这个文件是空的,因而,系统中所有的用户都可以使用at命令。不过,假如我们准备控制用户的at命令权限,这么只需把用户写入/etc/at.deny文件即可。
对于/etc/at.allow和/etc/at.deny文件的优先级,我们做一个实验来验证一下,命令如下:
[root@localhost~]#ls-l/etc/at*
-rw-r--r--.1rootroot11月302012/etc/at.deny
#系统中默认只有at.deny文件
[root@localhost~]#echouser1>>/etc/at.deny
[root@localhost~]#cat/etc/at.deny
user1
#把user1用户写入/etc/at.deny文件
[root@localhost~]#su-user1
[user1@localhost~]$at02:00
Youdonothavepermissiontouseat.
#没有权限使用at命令,切换成user1用户,这个用户早已不能执行at命令了
[user1@localhost~]$exit
logout
#返回root身分
[root@localhost~]#echouser1>>/etc/at.allow
[root@localhost~]#cat/etc/at.allow
user1
#完善/etc/at.allow文件,并在文件中写入user1用户
[root@localhost~]#su-user1
[user1@localhost~]$at02:00
at>
#切换成user1用户,user1用户可以执行at命令。这时user1用户既在/etc/at.deny文件中,又在/etc/at.allow文件中,而且/etc/at.allow文件的优先级更高
[user1@localhost~]$exit
logout
#返回root身分
[root@localhost~]#at02:00
at>
#root用户即使不在/etc/at.allow文件中,并且也能执行at命令以root登录linux系统则当前的工作目录是什么,
#root用户即使不在/etc/at.allow文件中,并且也能执行at命令,
#说明root用户不受这两个文件的控制
这个实验说明了/etc/at.allow文件的优先级更高,假如/etc/at.allow文件存在,则/etc/at.deny文件失效。/etc/at.allow文件的管理愈加严格,由于只有写入这个文件的用户能够使用at命令,假如须要禁用at命令的用户较多,则可以把少数用户写入这个文件。/etc/at.deny文件的管理较为松散,假如准许使用at命令的用户较多,则可以把禁用的用户写入这个文件。不过这两个文件都不能对root用户生效。
接出来即将介绍at命令。at命令的格式十分简单,基本格式如下:
[root@localhost~]#at[选项][时间]
有关此命令常用的几个选项及各自含意如表1所示。
表1at命令选项及含意选项含意
-m
当at工作完成后,无论命令是否输出,都用E-mail通知执行at命令的用户。
-c工作标示号
显示该at工作的实际内容。
-t时间
在指定时间递交工作并执行,时间格式为[[CC]YY]MMDDhhmm。
-d
删掉某个工作,须要提供相应的工作标示号(ID),同atrm命令的作用相同。
-l
列举当前所有等待运行的工作,和atq命令具有相同的额作用。
-f脚本文件
指定所要递交的脚本文件。
另外,表2列举了此命令中关于时间参数可用的以下格式。
表2at命令时间参数可用格式格式用法
HH:MM
例如04:00AM。假如时间已过,则它会在第二天的同一时间执行。
Midnight(midnight)
代表12:00AM(也就是00:00)。
Noon(noon)
代表12:00PM(相当于12:00)。
Teatime(teatime)
代表4:00PM(相当于16:00)。
英语月名日期年份
例如January152018表示2018年1月15号,年份可有可无。
MMDDYY、MM/DD/YY、MM.DD.YY
例如011518表示2018年1月15号。
now+时间
以minutes、hours、days或weeks为单位,比如now+5days表示命令在5天过后的此时此刻执行。
at命令只要指定正确的时间,就可以输入须要在指定时间执行的命令。这个命令可以是系统命令,也可以是Shell脚本。举几个反例。
【例1】
[coot@localhost~]#cat/root/hello.sh
#!/bin/bash
echo"helloworld!!"
#该脚本会复印"helloworld!!"
[root@localhost~]#atnow+2minutes
at>/root/hello.sh>>/root/hello.log
#执行hello.sh脚本,并把输出写入/root/hello.log文件
at>
#使用Ctrl+D快捷键保存at任务