介绍
- at 命令可以用来在某一时段执行一次任务,只会执行一次,不会重复执行。
- at的守护进程atd会以后台模式运行,检查作业队列来运行。
- 默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查队列中的所有作业运行时间,
- 如果时间与当前时间匹配,则运行此作业。(也就是说,at守护 进程的最小时间单位是分钟)
PS:这里的队列并不是说第一个执行了后面的才能执行,每次都会检查所有的任务
为保证atd进程的启动,可以使用相关指令来查看 ps -ef | grep atd
at命令详解
at [选项] [时间]
主要命令
所有命令
at指定时间的方法和案例
- 直接指定具体时间和日期
at 2:30 PM
这个命令将安排任务在今天的下午2:30执行
- 使用特定日期
at 2:30 PM tomorrow
这个命令将在明天下午2:30执行
at 2:30 PM 05/20/2024
这个命令将在2024年5月20日下午2:30执行
- 使用相对时间
at now + 1 hour
在当前时间的一个小时后执行
at now + 2 days
两天后执行
- 使用特殊关键词
at midnight
今天午夜执行
at midnight next Sunday
在下一个星期天的午夜执行
- 混合使用
at 2:30 PM next Friday
在下一个星期五的下午2:30执行
at 2:30 PM Fri May 20 2024
在2024年5月20日的星期五下午2:30执行
实际操作
创建一个任务,1分钟后输入hello world到/root/at.txt文件
输入以下指令进入 at 视图
at now + 1 minutes
输入任务
echo "hello world" > /root/at.txt
键盘 按下 ctrl + D 结束输入
查看是否执行:
at命令的白名单和黑名单
为了安全起见,我们不能让任意用户都可以使用at命令,以防止主机被劫持或者被黑客利用,所以我们还需要对at命令进行管控。
主要通过两个文件:一个是 at.allow文件一个是at.deny;来实现对at命名使用的限制,在没有这两个文件之前,at命令的执行是在编辑好任务后直接等待atd服务的执行,但是在有这两个文件之后,at命令的执行就发生了改变,它首先要通过这两个文件进行用户的限制
注意:
- 一般假设系统中所有用户都是可信任的,故而系统中at.allow文件是默认不存在的
- 而at.deny是默认存在且为空的,从而允许所有人都可以使用at命令。
具体流程如下:
案例
创建attest并添加至at.deny文件中并使用at命令
创建用户
useradd attest
将用户写到at.deny中
vim /etc/at.deny
切换用户并使用命令
su - attest
可见 attest用户无权限