Linux 计划任务管理工具全面解析:atq、cron、batch 和 at

以下是 atq 、cron 、batch 和 at 命令的功能解析:


1. atq(查看一次性计划任务队列)

  • 功能 :

    显示当前用户定义的所有 一次性计划任务 ,这些任务通常由 at 命令创建。

  • 语法:

    复制代码
    atq
  • 输出内容:

    • 显示任务的队列编号、执行时间和任务的所有者。
  • 示例:

    复制代码
    $ atq
    3   Thu Dec 21 12:00:00 2024 a user
    5   Thu Dec 21 18:00:00 2024 a user

    此输出表示当前用户有两个任务,分别在 12:00 和 18:00 执行。


2. cron(周期性任务调度)

  • 功能 :

    管理 周期性计划任务 ,支持在指定时间 反复执行。

  • 配置文件:

    • 系统级任务:/etc/crontab
    • 用户任务:~/.crontab
  • 常用命令:

    • 列出当前用户的任务 :

      复制代码
      crontab -l

    • 编辑当前用户的任务 :

      复制代码
      crontab -e

  • 示例 :

    在 crontab 中添加任务,每天 2:30 运行脚本 /path/to/script.sh:

    复制代码
    30 2 * * * /path/to/script.sh

3. batch(低负载时运行任务)

  • 功能 :

    定义在 系统负载较低 时运行的任务。

    系统会根据当前负载平均值(由 /proc/loadavg 获取)决定是否执行任务。

  • 语法:

    复制代码
    batch

    输入命令后进入交互模式,可输入需要执行的任务命令。

  • 示例:

    复制代码
    $ batch
    at> echo "Task is running under low system load" > /tmp/batch_task.log
    at> <Ctrl+D>

    此任务会在系统负载低时执行,并将输出写入 /tmp/batch_task.log。


4. at(定义一次性计划任务)


常见问题
注意事项

总结

at 是一个强大而简洁的工具,适用于单次定时任务。它与 cron 互为补充,在需要调度简单任务时非常便利。

  • 功能 :

    定义在 特定时间 执行一次的任务。

  • 语法:

    复制代码
    at [选项] 时间
    常见选项
    • -f <文件>:从指定的文件中读取命令并调度执行。
    • -l 或 atq:列出当前用户的任务队列。
    • -d 或 atrm:删除任务。
    • -m:任务完成后发送邮件给用户,即使任务没有输出。
    • -c <任务号>:查看指定任务的内容。

    时间格式
    • HH:MM:24小时制的时间。
    • noon:中午12点。
    • midnight:午夜12点。
    • now + n minutes/hours/days/weeks:当前时间后 n 分钟/小时/天/周。
    • MMDDYY 或 MM/DD/YY:指定日期和时间。
    • tomorrow:明天的同一时间。
  • 示例 1:指定时间运行任务:

    复制代码
    $ at 14:00
    at> echo "Task runs at 14:00" > /tmp/at_task.log
    at> <Ctrl+D>

    在当天 14:00 执行任务。

  • 示例 2:延迟运行任务:

    复制代码
    $ at now + 2 hours
    at> echo "Task runs after 2 hours" > /tmp/delayed_task.log
    at> <Ctrl+D>

    两小时后执行任务。

  • 示例3:通过文件调度任务

    复制代码
    at -f my_script.sh now + 1 hour
    • 调度任务为执行文件 my_script.sh,时间是 1 小时后。
  • 查看任务 : 用 atq 或at -l 命令查看当前定义的任务。

  • 删除任务 : 用 atrm 删除特定任务:

    复制代码
    atrm [任务编号]
  • at 命令权限

    • /etc/at.allow 和 /etc/at.deny 文件用于控制哪些用户可以使用 at。
    • 如果存在 /etc/at.allow 文件,只有列出的用户可以使用 at。
    • 如果不存在 /etc/at.allow,但存在 /etc/at.deny,所有不在 /etc/at.deny 中的用户都可以使用 at。
    • 如果两个文件都不存在,则只有超级用户可以使用 at。
  • 时间设置问题

    • 如果指定时间已过,任务会在次日同一时间执行。
  • 输出存储

    • 任务的输出(如果有)会发送到用户的邮箱,前提是系统已配置邮件服务。
  • 确保 atd 服务正在运行,否则 at 任务无法执行:

    复制代码
    systemctl status atd

  • 使用 at 的任务不支持复杂的循环逻辑,如每隔几小时执行一次,这种情况应使用 cron。


对比总结

命令 功能 是否周期性 是否查看/管理任务
atq 查看一次性任务队列 否 是
cron 周期性运行任务 是 是
batch 在系统负载低时运行任务 否 否(仅定义任务)
at 定义在特定时间执行一次的任务 否 否(仅定义任务)
相关推荐
FII工业富联科技服务5 分钟前
Omniverse 数字孪生与柔性自动化,如何破解产能与交付、设备与空间的双重困境?
运维·自动化·devops
润滑卫士8 分钟前
油液介电常数在线监测:测量原理与油液老化状态评估方法
运维
Rock Chin6971 小时前
把 n8n 接进 Slack:在对话里 @机器人 触发自动化工作流
运维·机器人·自动化
浩浩测试一下2 小时前
Linux 底层知识点 1
linux·运维·服务器
Eloudy2 小时前
全文 - IMEX 第01节 -IMEX overview
运维·服务器·网络
物联网软硬件开发-轨物科技2 小时前
【技术白皮书】光伏清检一体化机器人系统解决方案技术白皮书
大数据·运维·网络·人工智能·机器人
Escalating_xu2 小时前
【Linux 网络编程】TCP 跨平台实战:用 Windows 客户端访问 Linux 服务器
linux·服务器·网络
发量惊人的中年网工2 小时前
分公司访问总部ERP慢怎么办?SD-WAN组网的排查与验收要点
服务器·开发语言·php
海宇数据2 小时前
零信任架构实战:基于海宇网上踪迹欺诈行为识别构建自动化信贷资信评估网关
运维·人工智能·架构·自动化
翼龙云_cloud3 小时前
亚马逊云服务器服务代理商:Bedrock 实践经验 Serverless 架构下的 AI 自动化落地
服务器·架构·serverless·云计算·aws