Linux at 命令

Linux 命令大全 Linux 命令大全


at 是 Linux 系统中一个强大的定时任务调度工具,它允许用户在指定时间执行一次性任务,而不是像 cron 那样周期性执行。

cron 相比,at 更适合以下场景:

  • 只需要执行一次的任务
  • 在未来某个特定时间点运行的任务
  • 临时性的系统维护操作

安装与基本使用

检查安装

大多数 Linux 发行版默认已安装 at,可通过以下命令检查:

which at

如果未安装,可以使用包管理器安装:

实例

# Debian/Ubuntu
sudo apt-get install at

# CentOS/RHEL
sudo yum install at

启动 at 服务

安装后需要启动 atd 守护进程:

实例

sudo systemctl start atd
sudo systemctl enable atd  # 设置开机自启

命令语法与参数

基本语法

at [选项] 时间

常用选项

选项 说明
-f 文件 从指定文件读取命令而非标准输入
-m 任务完成后发送邮件给用户
-l 列出待执行的任务(同 atq
-d 任务ID 删除指定任务(同 atrm
-v 显示任务将被执行的时间

时间格式

at 支持多种时间格式:

  1. 绝对时间

    • HH:MM (如 14:30)
    • YYYY-MM-DD (如 2023-12-25)
    • 组合格式 HH:MM YYYY-MM-DD
  2. 相对时间

    • now + 数量 单位 (如 now + 2 hours)
    • 单位可以是:minutes, hours, days, weeks
  3. 特殊关键字

    • noon (中午12点)
    • midnight (午夜)
    • teatime (下午4点)
    • tomorrow (明天同一时间)

使用示例

示例1:基本使用

实例

$ at 15:30
warning: commands will be executed using /bin/sh
at> echo "Hello at command" > ~/at_test.txt
at>   # 按 Ctrl+D 结束输入
job 1 at Tue Jul 18 15:30:00 2023

示例2:从文件读取命令

创建脚本文件 myscript.sh

实例

#!/bin/bash
echo "This is a test" >> /tmp/at_log
date >> /tmp/at_log

然后使用:

at -f myscript.sh now + 5 minutes

示例3:查看和删除任务

实例

$ atq  # 或 at -l
1       Tue Jul 18 15:30:00 2023 a username

$ atrm 1  # 或 at -d 1

高级用法

设置环境变量

实例

$ at 16:00
at> export MY_VAR="test"
at> echo $MY_VAR > ~/env_test.txt
at>

执行复杂命令

实例

$ at 17:00 today
at> cd /var/log && grep "error" syslog > ~/error_log.txt
at>

使用 here document

实例

at 18:00 << 'EOF'
#!/bin/bash
echo "Starting backup..."
tar -czf ~/backup-$(date +%F).tar.gz ~/Documents
EOF


注意事项

  1. 权限控制

    • /etc/at.allow/etc/at.deny 文件控制用户访问权限
    • 如果 at.allow 存在,只有列出的用户可以使用 at
    • 如果 at.allow 不存在,检查 at.deny,其中列出的用户被禁止
  2. 输出处理

    • 默认情况下,命令的输出会通过邮件发送给用户
    • 使用 -m 选项强制发送邮件,即使没有输出
  3. 环境差异

    • at 执行时的环境可能与交互式 shell 不同
    • 重要的环境变量应在命令中显式设置
  4. 错误处理

    • 检查 atd 服务是否运行:systemctl status atd
    • 查看系统日志获取错误信息:journalctl -u atd

实践练习

  1. 创建一个任务,在5分钟后将当前日期和时间追加到 ~/time_log.txt 文件
  2. 编写一个脚本备份 /etc 目录,并使用 at 安排在明天凌晨2点执行
  3. 列出当前所有待执行的 at 任务,然后删除其中一个

总结

at 命令是 Linux 系统中管理一次性定时任务的强大工具。通过本文,你应该已经掌握了:

  • at 的基本概念和安装方法
  • 各种时间格式的指定方式
  • 创建、查看和删除任务的操作
  • 高级用法和注意事项

对于需要周期性执行的任务,可以考虑使用 cron,但对于一次性任务,at 无疑是最佳选择。


Linux 命令大全 Linux 命令大全