1)、 at服务管理与访问控制
at命令要想正确执行,需要atd服务的支持。atd服务是独立的服务,所以启动的命令是:
[root@localhost ~]# service atd start
正在启动 atd: [确定]
如果想要让atd服务开机时自动启动,可以使用如下命令:
[root@localhost ~]# chkconfig atd on
atd服务启动之后,at命令才可以正常使用,不过我们还要学习下at命令的访问控制。这里的访问控制指的是允许哪些用户使用at命令设定定时任务,或者不允许哪些用户使用at命令。大家可以想象成为设定黑名单或设定白名单,这样更容易理解。
at的访问控制是依靠/etc/at.allow文件(白名单)和/etc/at.deny文件(黑名单)这两个文件来实现的,具体规则如下:
如果系统中有/etc/at.allow文件,那么只有写入/etc/at.allow文件(白名单)中的用户可以使用at命令,其他用户不能使用at命令(/etc/at.deny文件会被忽略,也就是说同一个用户既写入/etc/at.allow文件,也写入/etc/at.deny文件,那么这个用户是可以使用at命令的,因为/etc/at.allow文件优先级更高。)。
如果系统中没有/etc/at.allow文件,只有/etc/at.deny文件,那么写入/etc/at.deny文件(黑名单)中的用户不能使用at命令,其他用户可以使用at命令。不过这个文件对root用户不生效。
如果系统中这两个文件都不存在,那么只有root用户可以使用at命令。
系统中默认时只有/etc/at.deny文件,而且这个文件是空的,这样的话系统中所有的用户都可以使用at命令。不过如果我们打算控制用户的at命令权限,把用户写入/etc/at.deny文件即可
/etc/at.allow文件的权限更高,如果/etc/at.allow文件存在,则/etc/at.deny文件失效。/etc/at.allow管理行为更加严格,因为只有写入这个文件的用户才能使用at命令,如果需要禁用at命令的用户较多,则可以把少数用户写入这个文件。/etc/at.deny文件的管理较为松散,如果允许使用at命令的用户较多,则可以把禁用的用户写入这个文件。不过这两个文件都不能对root用户生效。
2)、 at命令
[root@localhost ~]# at [选项] 时间
选项:
-m: 当at工作完成后,无论是否命令有输出,都用email通知执行at 命令的用户
-c 工作号: 显示该at工作的实际内容
时间:
at支持的时间格式如下:
HH:MM 在指定的“小时:分钟”执行命令,例如:02:30
HH:MM YYYY-MM-DD 在指定的“小时:分钟 年-月-日”执行,例如02:30 2018-07-25
HH:MM[am|pm] [month] [date] 在指定的“小时:分钟[上午|下午][月][日]”执行,
例如02:30 July 25
HH:MM[am|pm] + [minutes|hours|days|weeks] 在指定的时间“再加多久执行”,例
如now + 5 minutes,05am +2 hours
at命令只要指定正确的时间,就可以输入需要在指定时间执行的命令了,这个命令可以是系统命令,也可以是shell脚本。举几个例子吧:
例子1:
[root@localhost ~]# cat /root/hello.sh
#!/bin/bash
echo “hello world!!”
#该脚本会打印“hello workd!!”
[root@localhost ~]# at now +2 minutes
at> /root/hello.sh >> /root/hello.log
#执行hello.sh脚本,并把输出写入/root/hello.log文件
at> <EOT> 使用ctrl+d保存at任务
job 8 at 2018-07-25 20:54 这是第8个at任务,会在2018年7月25日20:54
分执行
[root@localhost ~]# at -c 8
#查询第8个at任务的内容
…省略部分内容… 主要是定义系统的环境变量
/root/hello.sh >> /root/hello.log
#可以看到at执行的任务
例子2:
[root@localhost ~]# at 02:00 2018-07-26
at> /bin/sync
at> /sbin/shutdown -h now
at> <EOT>
job 9 at 2018-07-26 02:00
#在指定的时间关机。在一个at任务中,是可以执行多个系统命令的
3)、 其他at管理命令
at还有查询和删除命令,命令如下:
[root@localhost ~]# atq
#查询当前服务器上的at工作
例如:
[root@localhost ~]# atq
9 2018-07-26 02:00 a root
#说明root用户有一个at任务在2018年7月26日的02:00执行,工作号是9
[root@localhost ~]# atrm [工作号]
#删除指定的at任务
例如:
[root@localhost ~]# atrm 9
[root@localhost ~]# atq
#删除9号at任务,再查询就没有at任务存在了
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/71256.html