at
at
是一个用于在指定时间执行一次性任务的命令行工具。与 cron
不同,cron
通常用于周期性地执行任务,而 at
则适用于仅需执行一次的任务。例如,在特定的时间点发送一封邮件、运行一个脚本或关闭服务器等。
at
命令允许用户将任务安排在未来某个时间点运行,并且支持多种时间格式来指定任务的执行时间。
at
在大多数 Linux 发行版中,at
并不是默认安装的,需要手动安装。
Ubuntu/Debian:
sudo apt-get install at
CentOS/RHEL:
sudo yum install at
安装完成后,确保 atd
服务已启动并设置为开机自启:
sudo systemctl start atd
sudo systemctl enable atd
at [选项] 时间
时间
: 指定任务执行的时间。选项
: 可选参数,如 -f
指定脚本文件等。at
支持多种时间格式,包括但不限于以下几种:
绝对时间:
HH:MM
或 YYYY-MM-DD HH:MM
at 14:30
表示当天下午 2:30 执行任务。相对时间:
now + X
(X 可以是 minutes、hours、days 或 weeks)at now + 5 minutes
表示 5 分钟后执行任务。自然语言:
at tomorrow
、at noon
、at midnight
等。在输入 at
命令并指定时间后,系统会进入交互模式,等待用户输入要执行的命令。输入完成后按 Ctrl+D
结束。
示例:
$ at 16:00
warning: commands will be executed using /bin/sh
at> echo "Hello, World!" > /tmp/output.txt
at> ^D
job 1 at 2023-10-05 16:00
上述命令会在当天下午 4:00 将字符串 "Hello, World!"
写入 /tmp/output.txt
文件。
使用 atq
命令查看当前所有待执行的任务:
$ atq
1 2023-10-05 16:00 a root
如果需要取消某个任务,可以使用 atrm
命令:
$ atrm 1
$ at now + 10 minutes
at> reboot
at> ^D
假设我们有一个脚本 send_email.sh
用于发送邮件,可以这样安排任务:
$ at 08:00 tomorrow
at> /path/to/send_email.sh
at> ^D
可以在一行中写多个命令,或者通过 -f
参数指定包含命令的脚本文件:
$ at 22:00
at> echo "Backup started" >> /var/log/backup.log
at> tar -czf backup.tar.gz /data/
at> echo "Backup completed" >> /var/log/backup.log
at> ^D
或者使用脚本文件:
$ echo -e "echo 'Backup started' >> /var/log/backup.log\ntar -czf backup.tar.gz /data/\necho 'Backup completed' >> /var/log/backup.log" > backup_script.sh
$ chmod +x backup_script.sh
$ at 22:00 -f backup_script.sh
at
命令。可以通过编辑 /etc/at.allow
和 /etc/at.deny
文件来控制用户权限。at
的执行结果会通过邮件发送给任务的创建者(前提是系统邮件功能已配置)。at
会立即执行任务。batch
命令: 类似于 at
,但 batch
会在系统负载较低时执行任务,而不是指定具体时间。cron
对比: cron
更适合周期性任务,而 at
更适合一次性任务。