Linux 的 at 命令定时执行任务
在 Linux 中循环执行命令或任务常用 crontab
开进行,定时执行一次命令或任务常用 at
命令进行。
安装 at
Debian or Ubuntu
1 | sudo apt update |
CentOS or redhat
1 | sudo yum install at |
at 的守护进程是 atd,使用 at 命令时一定要保证守护进程开启。
1 | # 开启守护进程 |
at 定时任务
at 定时任务的设置一般格式如下:
1 | at [option] runtime |
添加定时命令方法一
在上午10:00执行任务:
1 | at 10:00 |
添加定时命令方法二
直接使用 echo 命令添加定时任务
1 | # 10:00 执行重启电脑任务 |
添加定时任务方法三
有时候我们需要执行的任务是一个脚本文件,可以使用如下命令执行
1 | at 10:00 -f /home/jinzhongxu/hello.sh |
默认情况下,at 命令执行完后如果有输出结果会向用户发送邮件,可以使用如下方法抑制邮件发送:
1 | at 10:00 -M |
如果没有输出结果也想向用户发送邮件:
1 | at 10:00 -m |
时间
at 命令除了运行的命令和任务外,最重要的是时间,我们可以使用如下方法指定时间
time
时间格式有:HH:MM
或 HHMM
,如果是12小时制,可以使用 pm
,am
表示下午或上午。也可以使用时间单词,如:now
, midnight
, noon
, teatime
(表示16:00)。如果指定的时间超过当前时间,则会推迟1天执行。
date
也可以指导执行的天,如 today
, tomorrow
或 MMDD[CC]YY
, MM/DD/[CC]YY
, DD.MM.[CC]YY
或 [CC]YY-MM-DD
.
Increment
增量时间,如: now + count time-unit,这里 count 表示数字,time-unit 表示数字时间单位,如 minutes, hours, days, or weeks.
1 | # 在周日,比当前时间多10分钟执行命令 |
1 | # 2天后的下午1点 |
1 | # 1小时后执行 |
1 | # 在23年1月21日12:30执行 |
可以使用 -t
指定具体时刻,格式: [[CC]YY]MMDDhhmm[.ss]
1 | # 在23年1月1日12:30:32执行 |
指定队列
默认情况下,所有的 at 命令或任务在 a 队列,可以使用 -q
指定不同的队列,队列名编号可为 a-z
或 A-Z
1 | # 星期一比现在多2小时执行任务,添加到队列 L 中 |
查看任务队列
1 | atq |
前面的序号为任务序号,依次累计
取消队列任务
取消序号为 1 的任务
1 | atrm 1 |
限制用户
配置文件 /etc/at.deny
和 /etc/at.allow
分别表示限制用户使用 at
命令和允许某些用户使用 at
命令。
默认情况下,只存在配置文件 /etc/at.deny
且为空,表示所有用户可以使用 at
命令,如果不想某个用户使用,可以将用户名添加到该文件。
如果配置文件 /etc/at.allow
存在,则只有该文件中的用户可以使用命令。
如果两个配置文件都不存在,则只有具有管理员权限的用户可以使用。