当前位置:首页 > 技术 > 正文内容

Linux系统定时任务管理深入解析

访客 技术 2026年6月7日 1

一次性与周期性任务调度机制

在Linux系统中,自动化运维常依赖于计划任务功能。系统可通过at和cron工具实现命令的自动执行,分别适用于仅运行一次和重复执行的场景。CentOS等主流发行版默认预装at与cronie软件包,并通过atd和crond两个后台服务支撑其运行。

使用at命令执行单次任务

at指令用于安排在特定时间点仅执行一次的任务,要求atd服务处于激活状态。设定的时间必须晚于当前系统时间,否则任务无法被正确注册。

权限控制机制

at命令的访问权限由以下文件决定:

  • 若存在/etc/at.allow,则只有列在此文件中的用户可使用at;
  • 若不存在allow文件但存在/etc/at.deny,则deny列表外的所有用户均可使用;
  • 若两者均不存在,则仅root账户有权使用at功能。

多数系统默认提供空的/etc/at.deny,表示允许所有用户提交任务。如需禁止某用户,只需将其用户名写入该文件即可,每行一个账号。

任务创建方式

输入at命令并指定时间参数后,将进入交互式编辑界面(提示符为at>),每行输入一条待执行命令,最后按Ctrl+D结束输入并提交任务。

时间格式说明

at [选项] 时间定义

常见时间表达形式包括:

  • HH:MM:当天指定时刻执行,若已过则顺延至次日;
  • HH:MM YYYY-MM-DD:精确到年月日时分;
  • noon / midnight / teatime:分别代表中午12点、午夜0点、下午4点;
  • tomorrow:明日同一时间;
  • now + 数值 单位:例如now + 30 minutes5pm + 2 days

常用选项

-V显示版本信息
-t使用时间戳格式 [[CC]YY]MMDDhhmm[.ss]
-l 或 atq列出当前待处理任务
-d 或 atrm删除指定ID的任务
-c ID查看任务具体内容
-f 路径从文件读取任务脚本
-m任务完成后发送邮件通知(即使无输出)

示例操作

# 统计root进程数量并保存
[root@host ~]# at 14:05
at> pgrep -U root | wc -l > /tmp/root_procs
at> <EOT>
job 5 at Mon Sep 9 14:05:00 2019

# 查看待执行队列
[root@host ~]# atq
5   Mon Sep 9 14:05:00 2019 a root

# 删除任务
[root@host ~]# atrm 5

batch:基于系统负载延迟执行

batch本质上是at的一个变体,它会在系统负载低于0.8时才触发任务执行。此特性适合运行对性能敏感的低优先级作业。

[root@host ~]# batch
at> gzip /data/f1.log
at> <EOT>

可用uptime命令查看当前系统的平均负载情况。

所有at/batch任务存储于/var/spool/at/目录下,确保atd服务运行是前提条件。

cron周期性任务管理

cron用于设置重复执行的计划任务,依赖crond守护进程持续监控。相比at,更适合日常维护类操作。

配置结构与路径

  • /etc/crontab:系统级主配置文件;
  • /etc/cron.d/:附加配置目录;
  • /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/:按周期存放可执行脚本。

/etc/crontab 文件详解

该文件包含环境变量定义及任务条目模板:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=admin@example.com

# .---------------- 分钟 (0–59)
# |  .------------- 小时 (0–23)
# |  |  .---------- 日期 (1–31)
# |  |  |  .------- 月份 (1–12)
# |  |  |  |  .---- 星期 (0–6, 0和7均为周日)
# |  |  |  |  |
# *  *  *  *  * 用户名 命令

用户级任务存储位置

每个用户的cron任务独立保存在/var/spool/cron/<username>文件中,由crond进程实时监听变更,无需重启服务即可生效。

crontab命令操作

-e编辑当前用户任务列表
-l列出当前任务
-r清除全部任务
-u user指定目标用户(通常仅限root使用)

时间字段语法

五段式时间格式:

* * * * * command
│ │ │ │ │
│ │ │ │ └── 星期几 (0–6)
│ │ │ └──── 月份 (1–12)
│ │ └────── 日期 (1–31)
│ └──────── 小时 (0–23)
└────────── 分钟 (0–59)

特殊符号用法

  • *:任意值;
  • ,:列举多个值,如1,3,5
  • -:范围,如9-17表示上午9点到下午5点;
  • /:步长,如*/10在分钟字段表示每10分钟一次;
  • L:月末或最后一周的星期几,如6L表示"本月最后一个周六"。

典型表达式示例

# 每小时整点执行
0 * * * *

# 每两小时执行一次
0 */2 * * *

# 每月10号及每周一至周三11:00执行
0 11 10 * 1-3

# 每天14:01至14:40之间每分钟执行
1-40 14 * * *

# 工作日每隔5小时执行(早上8点开始)
0 8-16/5 * * 1-5

# 每年3月至6月的1、10、20号或每月周日执行
* * 1,10,20 3-6 0

实际应用案例

# 编辑任务
[root@host ~]# crontab -e

# 添加如下内容:
0 8 * * * /usr/bin/systemctl start httpd         # 每天8点启动Web服务
0 3 */5 * * /usr/bin/find /tmp -type f -mtime +7 -delete   # 每隔5天清理旧临时文件

注意事项

  1. 当同时指定了日期和星期字段时,任一条件满足即触发任务(逻辑"或"关系);其余字段为"与"关系。
  2. 输出默认通过邮件发送给用户,建议重定向避免垃圾邮件:
    * * * * * /script.sh >/dev/null 2>&1
  3. %字符在cron中有特殊含义(换行符),若需使用应转义为\%,或将命令封装进脚本。
  4. 推荐使用绝对路径调用程序,防止因PATH缺失导致执行失败。

查看与删除任务

# 查看当前用户任务
crontab -l

# 查看其他用户任务(需root权限)
crontab -u lisi -l

# 删除全部任务
crontab -r

anacron:弥补关机期间遗漏任务

对于非7x24运行的设备(如办公电脑周末关机),标准cron可能错过预定任务。anacron通过记录上次执行时间戳,在系统启动后检测是否错过了daily、weekly或monthly任务,并予以补执行。

其核心机制在于比较当前时间和上次运行时间,判断是否有周期未覆盖,从而唤醒延迟任务。anacron不会替代cron,而是作为补充共存。

日志追踪

可通过实时查看日志确认任务执行状态:

tail -f /var/log/cron

该日志记录了所有计划任务的触发时间、执行命令及结果信息。

标签: atcroncrontab

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。