不能直接通过查看 /var/spool/at/ 下的文件预览已提交任务的完整执行脚本,因其存储的是含时间戳、UID、环境变量及base64编码命令的二进制格式文件,需用 at -c <job_id> 解码还原完整上下文。

不能直接通过查看 /var/spool/at/ 下的文件来预览已提交任务的完整执行脚本。
at 任务文件不保存原始脚本内容
at 服务将用户提交的任务(如通过 at now + 1min 输入的命令)序列化为二进制或编码格式(具体取决于系统实现,常见为 base64 编码后的 shell 脚本片段),并存储在 /var/spool/at/ 中的文件里(如 a0000101234567.00)。这些文件不是明文 shell 脚本,而是包含时间戳、UID、环境变量、以及经过编码的实际命令数据。直接用 cat 或 less 查看会看到乱码或不可读内容。
正确查看已提交 at 任务的方法
应使用 at -c <job_id> 命令还原并显示任务的完整执行上下文:
- 先用
atq列出当前待执行的作业 ID 和时间 - 再运行
at -c <job_id>(例如at -c 123),该命令会解码并拼接出实际执行时的完整 shell 环境、PATH、cd 目录及原始命令 - 输出中包含临时生成的脚本头(如
#!/bin/sh)、环境设置、cd 切换、以及你输入的命令行 —— 这才是“完整执行脚本”的真实形态
为什么不能直接读 /var/spool/at/ 文件
该目录下的文件受权限保护(通常仅 root 可读),且格式非标准文本:
- 文件名是随机或时间戳编码,无用户可识别关联
- 内容含二进制头部信息(如 job time、uid、gid),后接 base64 编码的命令部分
- 即使 base64 解码,也只得到原始输入的命令行,缺失环境、工作目录等关键执行要素
补充说明:at 任务执行时的真实行为
at 执行任务时,会以提交用户的权限,在提交时的工作目录下,加载当时的环境变量(部分被清理),然后运行一个自动生成的临时脚本。at -c 模拟的就是这个过程,所以它是唯一可靠的方式。

















