当前位置: 首页 > 新闻动态 > 技术教程

at 任务安排后不执行或丢失的 atq / atrm 队列检查

作者:舞夢輝影 浏览: 发布日期:2026-01-27
[导读]:根本原因是atd服务未运行或用户被/etc/at.allow或/etc/at.deny拒绝;不同发行版默认权限策略不同,RHEL/CentOS仅允许root,Debian/Ubuntu允许所有本地用户(除非deny存在)。
根本原因是atd服务未运行或用户被/etc/at.allow或/etc/at.deny拒绝;不同发行版默认权限策略不同,RHEL/CentOS仅允许root,Debian/Ubuntu允许所有本地用户(除非deny存在)。

at 任务提交后 atq 查不到,任务直接消失

根本原因通常是 atd 服务未运行,或用户被 /etc/at.allow / /etc/at.deny 显式拒绝。Linux 发行版默认策略差异大:RHEL/CentOS 默认只允许 root,Debian/Ubuntu 默认允许所有本地用户(除非配置了 deny 文件)。

实操建议:

  • 先确认服务状态:systemctl status atd,若 inactive,请 systemctl enable --now atd
  • 检查权限控制文件:ls -l /etc/at.allow /etc/at.deny 2>/dev/null;若 /etc/at.allow 存在,则只有其中列出的用户能用 at;若不存在但 /etc/at.deny 存在且含用户名,则该用户被禁止
  • 普通用户提交失败时,at 命令通常静默退出,不会报错——可加 -f 指定脚本并配合 echo $? 查看退出码(非零即失败)

atq 能看到任务,但到期后不执行且无日志

常见于任务中使用了相对路径、未指定 SHELL 环境、或依赖交互式终端。at 默认以提交用户身份、在空环境(env -i 类似)下执行,PATH 极简(常只有 /usr/bin:/bin),且不加载 ~/.bashrc 等配置。

实操建议:

  • 任务脚本第一行务必写 #!/bin/bash,并在脚本内显式设置所需变量,如 PATH="/usr/local/bin:/usr/bin:/bin"
  • 所有命令用绝对路径,或在脚本开头 cd /full/path/to

    /workdir
  • 避免依赖 $HOME 或当前工作目录;如需邮件通知,确保 MAILTO 环境变量已设(export MAILTO="user@example.com"),且系统有可用 MTA(如 ssmtppostfix

atrm 删除失败:提示 “job not found” 或 “you do not own this job”

atrm 只能删除自己提交的任务(root 除外),且必须使用 atq 显示的原始 job ID(如 12345.a),不能省略后缀、不能用时间戳或描述匹配。

实操建议:

  • 先运行 atq 确认 job ID 格式,例如输出为 12345.a Wed Jun 12 10:30:00 2025 a user,则删时必须用 atrm 12345.a
  • 普通用户无法删除其他用户的任务,即使知道 ID;root 可删任意任务,但需注意:某些发行版(如 RHEL 8+)默认禁用 root 的 at 任务提交,需检查 /etc/at.allow 是否包含 root
  • 如果 atq 为空但你确定任务应存在,可能是 atd 在任务入队后崩溃过,此时队列文件(通常 /var/spool/at/ 下的 *.a 文件)可能残留,需手动清理(仅限 root,且确认 atd 已停)

at 队列时间不准、任务提前/延后执行

at 本身不维护高精度调度,它依赖系统时间与 atd 的轮询机制(默认每 60 秒扫描一次)。若系统时间跳变(如 NTP 矫正、虚拟机休眠唤醒),或 atd 进程卡住,就会导致偏差。

实操建议:

  • 检查系统时间同步状态:timedatectl status,确保 System clock synchronized: yes
  • 不要依赖 at 做秒级精度任务;需精确调度请改用 systemd timercron
  • 若发现大量任务堆积未执行,检查 atd 日志:journalctl -u atd -n 50 --no-pager,重点关注 “can't fork”、“permission denied” 或 “failed to stat” 类错误
真正容易被忽略的是环境隔离——哪怕脚本在 shell 中能跑通,放到 at 里就可能因缺少 PATH、HOME、甚至 LANG 而静默失败。每次调试,先用 echo "env && pwd && ls -l" | at now + 1 minute 快速验证基础执行环境。
免责声明:转载请注明出处:http://shjed.com/news/577102.html

扫一扫高效沟通

多一份参考总有益处

免费领取网站策划SEO优化策划方案

请填写下方表单,我们会尽快与您联系
感谢您的咨询,我们会尽快给您回复!