HCRM博客

CentOS中的at命令,如何在指定时间执行一次性任务?

CentOS at 命令详解

在CentOS操作系统中,at命令是一个强大的工具,用于在指定的时间安排一次性任务,与周期性任务调度工具cron不同,at只执行一次任务,而不是定期执行,本文将详细介绍at命令的基本用法、常见选项和一些高级用法,并通过具体示例帮助读者快速上手。

CentOS中的at命令,如何在指定时间执行一次性任务?-图1
(图片来源网络,侵权删除)

基本语法及用法

1. 基本语法

at [参数] [时间]

2. 安排一次性任务

使用at命令安排一个在未来某个时间执行的任务:

at TIME

要在今天下午4点执行/bin/ls命令:

at 16:00

输入命令后,at会进入交互模式,在交互模式中输入要执行的命令,最后按Ctrl+D结束输入。

3. 查看待执行任务

CentOS中的at命令,如何在指定时间执行一次性任务?-图2
(图片来源网络,侵权删除)

使用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

CentOS中的at命令,如何在指定时间执行一次性任务?-图3
(图片来源网络,侵权删除)

指定具体的小时和分钟。

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:当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出。

Iatq的别名。

datrm的别名。

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

batchat命令的特殊版本,在执行的任务会占用大量资源的时候用,只在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"
分享:
扫描分享到社交APP
上一篇
下一篇