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

以下是 atqcronbatchat 命令的功能解析:


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 <文件>:从指定的文件中读取命令并调度执行。
    • -latq:列出当前用户的任务队列。
    • -datrm:删除任务。
    • -m:任务完成后发送邮件给用户,即使任务没有输出。
    • -c <任务号>:查看指定任务的内容。

    时间格式
    • HH:MM:24小时制的时间。
    • noon:中午12点。
    • midnight:午夜12点。
    • now + n minutes/hours/days/weeks:当前时间后 n 分钟/小时/天/周。
    • MMDDYYMM/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 定义在特定时间执行一次的任务 否(仅定义任务)
相关推荐
勤奋的凯尔森同学43 分钟前
webmin配置终端显示样式,模仿UbuntuDesktop终端
linux·运维·服务器·ubuntu·webmin
丁卯4042 小时前
Go语言中使用viper绑定结构体和yaml文件信息时,标签的使用
服务器·后端·golang
chengooooooo2 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
人间打气筒(Ada)3 小时前
MySQL主从架构
服务器·数据库·mysql
落笔画忧愁e4 小时前
FastGPT快速将消息发送至飞书
服务器·数据库·飞书
小冷爱学习!4 小时前
华为动态路由-OSPF-完全末梢区域
服务器·网络·华为
技术小齐5 小时前
网络运维学习笔记 016网工初级(HCIA-Datacom与CCNA-EI)PPP点对点协议和PPPoE以太网上的点对点协议(此处只讲华为)
运维·网络·学习
ITPUB-微风5 小时前
Service Mesh在爱奇艺的落地实践:架构、运维与扩展
运维·架构·service_mesh
落幕5 小时前
C语言-进程
linux·运维·服务器
chenbin5206 小时前
Jenkins 自动构建Job
运维·jenkins