Linux at命令如何定时执行任务?

at 是 Linux 中用于安排一次性定时任务的核心工具,它允许用户在指定时间执行命令或脚本(例如备份文件、发送邮件或重启服务),任务执行后自动消失,适合临时性计划任务。


安装与基本语法

  1. 安装(多数系统已预装)
    若未安装,执行以下命令:

    sudo apt install at    # Debian/Ubuntu
    sudo yum install at    # CentOS/RHEL
  2. 启动服务

    sudo systemctl enable --now atd  # 启用并启动守护进程
  3. 基础语法

    at [选项] 时间

    输入命令后按 Enter,在 at> 提示符下输入要执行的命令,最后按 Ctrl+D 保存。


指定时间的 5 种常用格式

  1. 具体时间点

    at 14:30          # 14:30
    at 2:30 PM        # 14:30(12小时制)
    at 09:00 2025-08-01 # 指定日期
  2. 相对时间

    at now + 2 hours  # 2小时后
    at now + 30 min   # 30分钟后
    at noon + 1 day   # 明天中午
  3. at midnight       # 今晚午夜
    at teatime        # 下午16:00(系统默认)

核心操作示例

  1. 创建定时任务

    $ at now + 5 min
    at> /home/user/backup.sh  # 输入要执行的脚本
    at> echo "Done!" | mail -s "Alert" admin@example.com
    at> <EOT>                 # 按 Ctrl+D 保存
    job 3 at Mon Jul 15 10:25:00 2025
  2. 查看队列中的任务

    atq                      # 列出所有待执行任务
    # 输出示例:3   Mon Jul 15 10:25:00 2025 a user
  3. 删除任务

    atrm 3                   # 删除ID为3的任务
  4. 从文件读取命令

    at 15:00 -f /path/to/script.sh

实用选项详解

选项 作用
-m 任务完成后发送邮件给用户
-c 任务ID 查看任务的详细命令内容
-l 等同 atq,列出任务
-d 任务ID 等同 atrm,删除任务
-t 时间 使用 [[CC]YY]MMDDhhmm 格式时间

注意事项

  1. 权限控制

    • 通过 /etc/at.allow/etc/at.deny 文件管理用户权限:
      • at.allow 存在,仅允许列表中的用户使用 at
      • at.allow 不存在,检查 at.deny(黑名单)
      • 两文件均不存在时,仅 root 可用
  2. 环境变量问题
    at 默认使用最小环境变量,建议在脚本中使用绝对路径:

    at 08:00
    at> /usr/bin/python3 /data/scripts/cleanup.py  # 推荐
  3. 输出处理
    命令的输出会通过邮件发送给用户(除非重定向):

    at 09:00 <<EOF
    /opt/monitor.sh > /tmp/log.txt 2>&1  # 重定向输出到文件
    EOF

常见问题解决

  1. 任务未执行?

    • 检查 atd 服务状态:systemctl status atd
    • 查看系统日志:journalctl -u atd
    • 确认时间格式正确(避免时区混淆)
  2. 如何调试任务?
    使用 -c 查看任务内容:

    at -c 3 | less  # 检查ID为3的任务详情
  3. cron 的区别
    | 工具 | 类型 | 适用场景 |
    |——–|————|————————|
    | at | 一次性任务 | 临时计划(如维护提醒) |
    | cron | 周期性任务 | 日常自动化(如日志清理)|


安全实践

  • 敏感操作限制:避免在 at 中执行 rm -rf / 等危险命令
  • 日志审计:通过 syslog 查看 /var/log/syslog 中的 atd 记录
  • 权限最小化:普通用户任务应限制在个人目录内

引用说明参考 Linux 官方手册(man at)、IBM 开发者文档及 Red Hat 系统管理指南,实践前请确认您的系统版本,部分选项可能因发行版差异略有不同。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/8262.html

(0)
酷番叔酷番叔
上一篇 2025年7月21日 17:37
下一篇 2025年7月21日 17:47

相关推荐

  • 浏览器命令行如何打开网页?

    浏览器命令行通常指的是开发者工具中的控制台(Console),它是浏览器内置的交互式环境,主要用于调试JavaScript代码、查看网络请求、执行命令等操作,虽然严格来说“命令行”更偏向系统终端,但在浏览器上下文中,用户提到的“打开网页”更多是指通过控制台执行命令来触发页面跳转或新窗口打开,以下将详细说明如何通……

    2025年8月23日
    5800
  • 安全信息管理制度如何保障信息安全?

    安全信息管理制度是组织在数字化时代保障信息安全的核心框架,通过系统化的规范、流程和技术手段,对安全信息的采集、传输、存储、使用、销毁等全生命周期进行管理,旨在防范信息泄露、篡改、丢失等风险,确保业务连续性和数据资产安全,随着信息技术的快速发展和网络威胁的日益复杂化,建立并完善安全信息管理制度已成为各类组织(尤其……

    2025年11月17日
    2200
  • 开机为何是硬件初始化?

    通电后固件(如BIOS/UEFI)执行加电自检,检测并初始化CPU、内存、存储设备等关键硬件组件,完成基本配置,为后续加载操作系统奠定基础。

    2025年8月8日
    5600
  • 桌面网络怎么用命令打开

    Windows系统中,可按下“Win+R”组合键打开运行窗口,输入相关网络命令

    2025年8月17日
    5400
  • 为什么会出现常见问题?怎么办?

    当在Windows命令提示符或PowerShell中输入telnet命令时,系统提示”不是内部或外部命令”,根本原因是Telnet客户端未启用,自Windows 7起,微软出于安全考虑(Telnet协议传输明文数据),默认不再预装该功能,需手动启用,解决方案(适用Windows 10/11/8/7)✅ 方法1……

    2025年7月26日
    6500

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信