CentOS at 命令详解
在CentOS操作系统中,at
命令是一个强大的工具,用于在指定的时间安排一次性任务,与周期性任务调度工具cron不同,at
只执行一次任务,而不是定期执行,本文将详细介绍at
命令的基本用法、常见选项和一些高级用法,并通过具体示例帮助读者快速上手。
基本语法及用法
1. 基本语法
at [参数] [时间]
2. 安排一次性任务
使用at
命令安排一个在未来某个时间执行的任务:
at TIME
要在今天下午4点执行/bin/ls
命令:
at 16:00
输入命令后,at
会进入交互模式,在交互模式中输入要执行的命令,最后按Ctrl+D
结束输入。
3. 查看待执行任务
使用atq
命令可以查看当前用户的待执行任务:
atq
输出示例:
8 20231026 16:00 a root 7 20231026 17:00 a root
4. 删除待执行任务
使用atrm
命令可以删除指定的待执行任务:
atrm JOB_ID
删除工作号为7的任务:
atrm 7
指定时间格式
1. HH:MM
指定具体的小时和分钟。
at 04:00
如果该时刻已超过,则任务将在第二天的这个时间执行。
2. HH:MM YYYYMMDD
规定在某年某月的某一天的特殊时刻进行该项任务。
at 04:00 20240701
3. HH:MM[am|pm] [Month] [Date]
采用12小时计时制,并加上AM或PM说明是上午还是下午。
at 04pm March 17
4. HH:MM[am|pm] + number [minutes|hours|days|weeKS]
规定在某个时间点再加多少时间后才进行该项任务。
at now + 5 minutes at 04pm + 3 days
5. today(或tomorrow(明天)
直接使用today或tomorrow来指定完成命令的时间。
at tomorrow
常见选项及参数
m
:当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出。
I
:atq
的别名。
d
:atrm
的别名。
v
:显示任务将被执行的时间。
c
:打印任务的内容到标准输出。
V
:显示版本信息。
q
:后面加<列队>,使用指定的列队。
f
:后面加<文件>,从指定文件读入任务而不是从标准输入读入。
t
:后面<时间参数>,以时间参数的形式提交要运行的任务。
限制用户的使用权限
为了系统安全,可以通过控制文件限制用户对at
命令的使用:
1、/etc/at.allow
:写在这个文件中的使用者才能使用at
。
2、/etc/at.deny
:若写在这个文件中的使用者则不能使用at
。
3、如果两个文件都不存在,那么只有root可以使用at
命令。
4、在一般的distributions中,由于假设系统上的所有用户都是可信任的,因此系统通常会保留一个空的/etc/at.deny
文件,意思是允许所有人使用at
命令。
5、如果不希望有某些使用者使用at
,将那个使用者的帐号写入/etc/at.deny
即可!一个帐号写一行。
注意事项
1、如果at
的指令输出的路径有误,则会把结果以邮件的形式发送给用户。
2、当一个任务创建了会被分配到一个任务号,而且会在/var/spool/at
里面排队,不建议使用vi编辑器去修改,容易出错。
实例操作指南
1. 三天后的下午5点执行 /bin/ls
at 5pm + 3 days at> /bin/ls at> <EOT> job 7 at 20231029 17:00
2. 明天17点钟,输出时间到指定文件内
at 17:20 tomorrow at> date > /root/doiido.log at> <EOT> job 8 at 20231027 17:20
3. 计划任务设定后,在没有执行之前用atq
命令查看系统没有执行工作任务
atq 8 20231027 17:20 a root 7 20231029 17:00 a root
4. 删除已经设置的任务
atrm 7
5. 显示已经设置的任务内容
at c 8 #!/bin/sh atrun uid=0 gid=0 mail root 0 echo "hello" date > doiido.log
扩展指令batch
batch
为at
命令的特殊版本,在执行的任务会占用大量资源的时候用,只在CPU需求低于80%的时候使用:
batch at> echo "hi" > /dev/tty2
batch
创建的任务也是通过atq
查看,通过atrm
删除。
FAQs问答环节
Q1:at
命令如何安装?
A1: 在某些CentOS版本中,可能需要手动安装at
服务,可以使用以下命令进行安装:
yum y install at
启动并设置开机自启:
ps ef | grep atd # 查看是否开启atd进程 /etc/init.d/atd start # 开启atd服务 chkconfig level 2345 atd on # 设置atd开机启动
Q2: 如何查看所有用户的at任务?
A2: 使用超级用户权限执行以下命令:
sudo atq
或者查看特定用户的任务:
sudo atq user_name
Q3: 如何确保任务执行结果通知用户?
A3: 使用m
选项,当任务完成后,系统会发送邮件给指定用户:
at m now + 1 minute echo "Task completed"