运维.Linux下执行定时任务(中:Cron的常用替代方案)

运维系列
Linux下执行定时任务(中:Cron的常用替代方案)

- 文章信息 - Author: 李俊才 (jcLee95)
Visit me at CSDN: https://jclee95.blog.csdn.net
My WebSitehttp://thispage.tech/
Email: 291148484@163.com.
Shenzhen China
Address of this article:https://blog.csdn.net/qq_28550263/article/details/139969289
HuaWei:https://bbs.huaweicloud.com/blogs/429813

【介绍】:本文介绍除了Cron外,其他常见的定时任务方案用法。


上一节:《 Linux下执行定时任务(上:Cron简介与用法解析)
| 下一节:《 Python布式任务队列系统:Celery(下执行定时任务 - 下:)

在这里插入图片描述


1. 概述

尽管CRON是一个强大且广泛使用的定时任务工具,但在某些情况下,它可能不是最佳选择。随着技术的发展和需求的多样化,许多替代方案应运而生,以解决CRON的一些局限性并提供更多功能。本文将探讨CRON的局限性,并介绍几种常用的替代方案。

1.1 CRON的局限性

虽然CRON在许多场景下表现出色,但它也存在一些限制:

  1. 精度限制:CRON的最小时间单位是分钟,不适合需要秒级或毫秒级精度的任务。

  2. 复杂依赖管理:对于有复杂依赖关系的任务,CRON难以直接处理任务之间的依赖关系。

  3. 错过执行的处理:如果系统在预定执行时间关机,CRON默认不会在系统重启后执行错过的任务。

  4. 分布式系统支持:在分布式环境中,CRON难以协调跨多个服务器的任务执行。

  5. 动态调度:CRON不支持基于实时条件动态调整任务执行计划。

  6. 资源管理:CRON本身不提供任务的资源使用限制或优先级管理。

  7. 监控和报告:虽然可以通过其他工具实现,但CRON本身缺乏内置的全面监控和报告功能。

鉴于CRON的这些局限性,在某些场景下我们需要寻找替代方案。理想的替代方案应该能够:

  1. 提供更精细的时间控制
  2. 处理复杂的任务依赖关系
  3. 管理错过的任务执行
  4. 支持分布式环境
  5. 允许动态调度
  6. 提供资源管理和优先级控制
  7. 集成监控和报告功能

1.2 常见替代方案概览

本文将介绍以下几种CRON的常用替代方案:

  1. Systemd Timers:现代Linux系统中的内置选项,提供更精确的时间控制和更好的日志管理。

  2. Anacron:适用于不需要精确时间执行,但需要保证任务最终会被执行的场景。

  3. at 命令:用于安排一次性任务在未来的某个时间点执行。

这些替代方案各有特点,适用于不同的场景和需求。在接下来的章节中,我们将详细探讨Systemd TimersAnacronat 命令的特性、优势、适用场景以及基本使用方法,帮助读者根据自己的具体需求选择最合适的工具。

2. Systemd Timers

2.1 简介

Systemd Timers 是现代 Linux 系统中 CRON 的一个强大替代品。它具有以下优点:

  1. 更精确的时间控制,支持毫秒级精度。
  2. 更好的日志管理和错误报告。
  3. 可以轻松处理错过的任务(例如,系统关机时)。
  4. 与其他 systemd 服务集成更好。

2.2 工作原理

Systemd Timers 由两个主要组件组成:

  1. Timer 单元.timer 文件):定义何时触发任务。
  2. Service 单元.service 文件):定义要执行的实际任务。

当 Timer 单元触发时,它会启动相应的 Service 单元。这种分离允许更灵活的配置和管理。

2.3 基本使用

以下是创建和使用 Systemd Timer 的基本步骤:

  1. 创建 Service 单元文件(例如:my-task.service):
[Unit]
Description=My scheduled task[Service]
ExecStart=/path/to/my/script.sh
  1. 创建 Timer 单元文件(例如:my-task.timer):
[Unit]
Description=Run my task every hour[Timer]
OnCalendar=hourly
Persistent=true[Install]
WantedBy=timers.target
  1. 将文件放在 /etc/systemd/system/ 目录下。

  2. 重新加载 systemd 配置:

sudo systemctl daemon-reload
  1. 启用并启动定时器:
sudo systemctl enable my-task.timer
sudo systemctl start my-task.timer

2.4 高级功能

Systemd Timers 提供了许多高级功能,包括:

  1. 精确调度:支持复杂的时间表达式,如 OnCalendar=Mon,Tue *-*-01..07 12:00:00

  2. 随机延迟:可以添加随机延迟以避免多个任务同时启动,例如 RandomizedDelaySec=10m

  3. 持久性:使用 Persistent=true 可以在系统启动后执行错过的任务。

  4. 单调时间:使用 OnUnitActiveSec= 可以基于上次任务完成时间来调度下一次执行。

  5. 依赖管理:可以设置 Timer 单元依赖于其他单元,确保按正确顺序执行。

2.5 管理和监控

Systemd 提供了多种工具来管理和监控定时器:

  1. 列出所有定时器:

    systemctl list-timers
    
  2. 查看定时器状态:

    systemctl status my-task.timer
    
  3. 查看任务执行日志:

    journalctl -u my-task.service
    

2.6 优缺点和使用常见

Systemd Timers是一个强大的 CRON 替代品,特别适合需要精确控制和系统级集成的现代 Linux 环境。它特别适合以下场景:

  1. 需要毫秒级精度的任务调度。
  2. 系统级任务,特别是那些需要与其他系统服务集成的任务。
  3. 需要详细日志和错误报告的任务。
  4. 在系统重启后需要执行错过的任务的场景。

不过Systemd Timers也有一些局限性:

  1. 配置相对复杂,学习曲线较陡。
  2. 不适用于非 systemd 的系统。
  3. 对于简单的用户级任务,可能显得过于复杂。

好的,我将为您详细展开 “7.2 Anacron” 部分。

3. Anacron

3.1 简介

Anacron 是一个补充 CRON 的工具,特别适用于不需要精确时间执行,但需要保证任务最终会被执行的场景。它主要用于处理在系统关机时错过的定期任务,特别适合不是 24/7 运行的系统,如个人电脑或笔记本电脑。

3.2 工作原理

Anacron 的工作原理如下:

  1. 定期检查任务是否在指定的时间间隔内执行过。
  2. 如果任务没有在指定时间内执行,Anacron 会在系统下次启动时运行该任务。
  3. Anacron 使用时间戳文件来跟踪任务的最后执行时间。
  4. 任务执行后,Anacron 更新时间戳文件。

3.3 基本使用

Anacron 的配置文件通常位于 /etc/anacrontab。以下是一个基本的配置示例:

# 周期  延迟  任务标识符      命令
1        5    daily-backup    /path/to/backup-script.sh
7        10   weekly-cleanup  /path/to/cleanup-script.sh
@monthly 15   monthly-report  /path/to/report-script.sh

配置说明:

  • 周期:指定任务执行的间隔(天数)。使用 @daily@weekly@monthly 也是可以的。
  • 延迟:任务开始前的延迟时间(分钟),用于避免系统启动时多个任务同时运行。
  • 任务标识符:用于识别任务的唯一名称。
  • 命令:要执行的实际命令或脚本。

3.4 高级功能

  1. 自定义时间戳目录
    可以通过设置 ANACRONTAB 环境变量来指定自定义的 anacrontab 文件位置。

  2. 随机延迟
    可以使用 START_HOURS_RANGE 设置来指定任务可以开始执行的时间范围,增加随机性。

  3. 条件执行
    可以在命令前添加条件检查,例如:

    1 5 daily-task test -x /path/to/script && /path/to/script
    
  4. 用户特定的 Anacron
    某些系统允许用户创建自己的 anacrontab 文件,通常位于 ~/.anacron/ 目录。

3.5 管理和监控

  1. 手动运行 Anacron

    sudo anacron -f
    

    这将强制执行所有到期的任务。

  2. 查看 Anacron 日志
    Anacron 的日志通常记录在系统日志中,可以通过以下命令查看:

    grep anacron /var/log/syslog
    
  3. 测试配置
    使用 -T 选项可以测试 anacrontab 文件的语法:

    anacron -T
    

3.6 优缺点和适用场景

优点

  1. 适合不需要精确时间执行的任务。
  2. 确保即使系统不是持续运行,任务最终也会被执行。
  3. 避免了多个错过的任务在系统启动时同时运行。
  4. 配置相对简单。

缺点

  1. 不适合需要精确时间执行的任务。
  2. 不支持小于一天的执行间隔。
  3. 不适合需要实时响应的任务。

适用场景

  1. 个人电脑或笔记本电脑上的维护任务。
  2. 不需要精确执行时间的定期备份任务。
  3. 系统清理和更新等不频繁的维护工作。
  4. 需要确保任务最终会被执行,但执行时间不敏感的场景。

AnacronCRON 的一个很好的补充,特别适合那些不需要精确时间执行,但需要确保任务最终会被执行的场景。它的简单性和可靠性使其成为许多系统管理员和个人用户的首选工具,尤其是在处理非持续运行系统上的定期任务时。

好的,我将为您详细展开 “4. at 命令” 这一部分。

4. at 命令

4.1 简介

at 命令是 Unix-like 系统中的一个实用工具,用于安排一次性任务在未来的某个特定时间点执行。与 CRON 不同,at 主要用于执行一次性的计划任务,而不是重复性任务。

4.2 工作原理

at 命令的工作原理如下:

  1. 用户指定一个未来的时间点和要执行的命令。
  2. at 守护进程(通常是 atd)将任务信息存储在队列中。
  3. 当指定的时间到达时,atd 执行相应的任务。
  4. 任务执行完成后,它会从队列中删除。

4.3 基本使用

4.3.1 基本语法

at [选项] 时间

4.3.2 时间指定方式

at 命令支持多种时间指定方式:

  1. 具体时间:

    at 2:30pm
    at 14:30
    
  2. 相对时间:

    at now + 1 hour
    at now + 30 minutes
    
  3. 特定日期:

    at 2:30pm July 31
    at 14:30 31.7.23
    

4.3.3 使用示例

  1. 安排任务在 5 分钟后执行:

    at now + 5 minutes
    warning: commands will be executed using /bin/sh
    at> echo "Hello, future!" > /tmp/at_test.txt
    at> 
    job 1 at Wed Jul 12 15:05:00 2023
    

    输入完命令后,按 Ctrl+D 结束输入。

  2. 从文件中读取命令:

    at 10:00 PM -f /path/to/script.sh
    
  3. 在特定日期执行任务:

    at 9:00 AM Aug 15
    at> /home/user/backup.sh
    at> 
    
  4. 使用管道输入命令:

    echo "mail -s 'Report' boss@example.com < /tmp/report.txt" | at 5:00 PM
    

4.4 高级功能

  1. 批处理模式
    batch 命令类似于 at,但它会在系统负载较低时执行任务:

    batch
    at> long_running_script.sh
    at> 
    
  2. 指定队列
    使用 -q 选项可以指定不同的队列(用字母 a-z 表示):

    at -q b 2:00 PM
    
  3. 邮件通知
    默认情况下,at 会在任务执行完成后发送邮件。使用 -m 选项可以确保即使没有输出也发送邮件。

  4. 环境变量
    at 会继承当前 shell 的环境变量,这可以用来设置特定的执行环境。

4.5 管理和监控

  1. 查看待执行的任务

    atq
    

    at -l
    
  2. 查看特定任务的详情

    at -c [job number]
    
  3. 删除计划任务

    atrm [job number]
    

    at -r [job number]
    
  4. 限制用户使用 at
    通过编辑 /etc/at.allow/etc/at.deny 文件可以控制哪些用户可以使用 at 命令。

4.6 优缺点和适用场景

优点

  1. 简单易用,适合快速安排一次性任务。
  2. 不需要修改系统配置文件。
  3. 可以精确到分钟级别的调度。
  4. 支持在系统负载较低时执行任务(使用 batch 命令)。

缺点

  1. 主要用于一次性任务,不适合重复性任务。
  2. 如果系统在指定时间关机,任务将不会执行。
  3. 管理大量 at 任务可能变得复杂。

适用场景

  1. 需要在特定时间执行的一次性维护任务。
  2. 延迟执行的命令或脚本。
  3. 在未来某个时间点发送提醒或通知。
  4. 在非工作时间安排资源密集型任务。
  5. 临时性的系统管理任务。

at 命令是一个强大而灵活的工具,特别适合那些需要在未来某个时间点执行一次性任务的场景。它的简单性使其成为系统管理员和开发者的得力助手,尤其是在处理临时性或紧急任务时。然而,对于需要定期重复执行的任务,CRON 或其他替代方案可能更为合适。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/34032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CMA软件测试报告对企业和用户有什么好处?

CMA是中国计量认证的简称&#xff0c;由省级以上人民政府计量行政部门对检测机构的检测能力及可靠性进行的一种全面的认证及评价&#xff0c;认证对象是所有对社会出具公正数据的产品质量监督检验机构及其它各类实验室&#xff0c;是需要强制性认证的资质。取得该资质认证的&am…

【golang学习之旅】复杂数据类型——指针 函数

系列文章 【golang学习之旅】使用VScode安装配置Go开发环境 【golang学习之旅】报错&#xff1a;a declared but not used 【golang学习之旅】Go 的基本数据类型 【golang学习之旅】深入理解字符串string数据类型 【golang学习之旅】go mod tidy 【golang学习之旅】记录一次 p…

这就是人性的丑恶,很残酷但很现实

这些年我喜欢跟垃圾撕破脸&#xff0c;包括垃圾亲戚&#xff0c;我是不会跟你讲什么感情的&#xff0c;该滚蛋就滚蛋。我最不喜欢听什么今日留一线&#xff0c;日后好相见。 之前我还不懂事的时候&#xff0c;就有那种亲戚叫我帮他介绍工作&#xff0c;我照做了。 结果&#xf…

Android 11 ,默认授予预置应用/APK 需要的权限,解决permission denied for window type 2003 问题。

写这篇文章的原因是解决了一个APP闪退的问题&#xff0c;闪退的原因是插拔U盘时&#xff0c;注册的广播接收者接收到广播需要弹出一个Dialog询问是否需要打开U盘&#xff0c;这个Dialog设置的是系统级别悬浮窗&#xff0c;没有这个权限&#xff0c;报错导致闪退&#xff0c;下面…

腰背肌筋膜炎的症状及治疗

腰背肌筋膜炎的症状 一、疼痛特点&#xff1a; 主要表现为腰背部弥漫性钝痛&#xff0c;尤以两侧腰肌及髂嵴上方更为明显。疼痛特点为晨起痛&#xff0c;日间轻&#xff0c;傍晚复重。长时间不活动或活动过度均可诱发疼痛&#xff0c;病程长&#xff0c;且因劳累及气候变化而发…

小红书营销:解锁企业增长新引擎,与小红书集成实现精准获客

在数字化营销的新时代&#xff0c;小红书以其独特的社区文化和精准的用户定位&#xff0c;成为了品牌和企业争相入驻的热门平台。今天将探讨如何通过小红书平台进行营销获客&#xff0c;并强调与企业集成的重要性&#xff0c;以实现更高效的品牌增长。 一、小红书营销的独特优…

基于 MHA 的 MySQL 高可用主从架构

Author&#xff1a;Arsen Date&#xff1a;2024/06/25 目录 一、前言1.1 概述1.2 组件1.3 流程 二、环境三、部署3.1 基本环境3.1.1 hosts 配置3.1.2 配置 SSH 免密访问 3.2 MySQL 主从3.2.1 基础环境配置3.2.2 启动 MySQL 实例3.2.3 配置 MySQL 主从3.2.4 MySQL 主从同步验证 …

Calibre - 合并电子书(EpubMerge)

这里使用 Calibre 软件和 EpubMerge 插件 EpubMerge github &#xff1a; https://github.com/JimmXinu/EpubMerge 1、安装 Merge 插件 安装后需要重启 calibre 2、查看设置 4 3、选中文件、开始合并 合并完成后&#xff0c;会弹窗窗口&#xff0c;来编辑 合辑的元信息 完成…

基于python的随机森林多分类模型

1.随机森林多分类模型 1.1 基本原理 随机森林&#xff08;Random Forest&#xff09;是一种基于决策树的集成学习方法&#xff0c;它通过将多个决策树进行组合&#xff0c;以投票或平均的方式得到最终的预测结果。在多分类问题中&#xff0c;随机森林通过构建多个决策树&#…

开发RpcProvider的网络服务

首先更改src的CMakeLists.txt的内容为&#xff1a; #当前目录的所有源文件放入SRC_LIST aux_source_directory(. SRC_LIST)#生成SHARED动态库 #add_library(mprpc SHARED ${SRC_LIST})#由于muduo是静态库&#xff0c;为了使用muduo&#xff0c;将mprpc也生成为静态库 add_libr…

A股周一走势历史罕见,你知道是为什么吗?

今天的A股&#xff0c;让人历史罕见&#xff0c;你知道是为什么吗&#xff1f;盘面出现2个重要信号&#xff0c;一起来看看&#xff1a; 1、今天大盘低开低走&#xff0c;跌懵了&#xff0c;两市板块全部在等待翻红&#xff0c;这让人历史罕见。 2、盘面出现2个重要信号&#x…

【计算机毕业设计】167校园失物招领微信小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

办公人导航-上网导航,找网站,下软件,找资源!

办公人导航是一个专门为办公人员设计的实用导航网站&#xff0c;旨在帮助用户高效地找到各种优质的办公资源和工具。无论是需要查找办公软件、学习资源还是娱乐工具&#xff0c;在办公人导航上都能找到你需要的内容。 办公人导航-实用的办公生活导航网站&#xff01;https://ww…

PADS系列:如何导入元件库新建元件

对于普通的原理图&#xff0c;位置的摆放是比较随意的&#xff0c;并且也没有一些特殊的或者元件库里面没有的元件&#xff0c;相对来说绘制会比较简单。但是如果碰上复杂一点的电路&#xff0c;要绘制起来就会比较麻烦&#xff0c;需要一些新的PADS使用技巧&#xff0c;最基础…

k8s设置pod资源请求和限制

设置资源请求和限制 实验目标&#xff1a; 学习如何为 Pod 设置资源请求和限制&#xff0c;以优化集群资源分配。 实验步骤&#xff1a; 创建一个 Deployment&#xff0c;并设置 CPU 和内存的资源请求和限制。使用 kubectl describe 命令查看资源分配情况。观察资源限制对 P…

全球首个数字人开源了

DUIX&#xff08;Dialogue User Interface System&#xff09;是硅基智能打造的AI数字人智能交互平台。通过将数字人交互能力开源&#xff0c;开发者可自行接入多方大模型、语音识别&#xff08;ASR&#xff09;、语音合成&#xff08;TTS&#xff09;能力&#xff0c;实现数字…

Chrome Tracing flow event demo

Chrome Tracing flow event demo 1.效果2.解释3.代码 Chrome Tracing flow event demo 1.效果 2.解释 cpu_op 为host上的opkernel 为device上的kernel标记一条线 {"ph": "s", "id": 13, "pid": 1, "tid": 100, "ts&qu…

【Containerd】Containerd接入Harbor仓库

说明 在日常使用容器时&#xff0c;安全方便起见一般都会使用到私有仓库&#xff0c;一般都是采用 harbor 作为私有仓库&#xff0c;docker 对接 harbor 仓库非常简单&#xff0c;那么 containerd 如何对接 harbor 呢&#xff1f; 在内网使用 harbor 根据个人习惯&#xff0c…

eNSP中ACL访问控制表的配置和使用

一、拓扑图 1.新建拓扑图 2.PC端配置 PC1: PC2: PC3: 二、基本命令配置 1.S1配置 <Huawei>system-view [Huawei]sysname S1 [S1]vlan 10 [S1-vlan10]vlan 20 [S1-vlan20]vlan 30 [S1-vlan30]quit [S1]interface Vlanif 10 [S1-Vlanif10]ip address 192.168.10…

Gradle学习-2 Groovy

1、Groovy基础语法 1.1、基本数据类型 Groovy支持数据类型&#xff1a;byte, short, int, long, float, double, char &#xff08;1&#xff09;创建一个Android Studio项目 &#xff08;2&#xff09;在根目录新建一个 leon.gradle&#xff0c;输入以下内容 leon.gradle…