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

news2024/11/10 8:00:30
运维系列
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.coloradmin.cn/o/1877880.html

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

相关文章

阿里云智能编程助手的安装使用

https://help.aliyun.com/document_detail/2590613.html 通义灵码&#xff0c;是阿里云出品的一款基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、异常报错排查等能力&a…

前端存储都有哪些

cookie 、sessionStorage、localStorange、http缓存 、indexDB cookie 由服务器设置&#xff0c;在客户端存储&#xff0c;然后每次发起同源请求时&#xff0c;发送给服务器端。cookie最多能存储4K数据&#xff0c;它的生存时间由expires属性指定&#xff0c;并且cookie只能被…

Mathematica训练课(46)-- 一些常用的画图函数

在前面的课程中&#xff0c;我们已经梳理了Plot的画图用法&#xff0c;今天就详细梳理一下其他的画图函数用法&#xff1b; 1. 画一条直线 2. Circle(圆) 3. Disk&#xff08;圆盘&#xff09; 4. 画出一个矩形 5. 箭头

MAS0902量产工具分享,MAS0902A开卡教程,MAS0901量产工具下载

MAS0902和MAS1102都是基于SATA3.2技术开发的DRAM-less SSD控制芯片&#xff0c;简单来说就是SATA协议无缓存主控。下面是我摸索的麦光黑金300 240G SSD开卡修复简易教程&#xff0c;也就是MAS0902量产过程&#xff1a; 注意&#xff1a;开卡转接线必须要用ASM1153E或JMS578主控…

Github Page 使用手册(保姆级教程!)

搭建个人网站&#xff1f;没有服务器&#xff1f;那不如尝试一下 Github Page &#xff01; 最近我正好在搭建个人网站&#xff0c;于是就写一篇博客来详细介绍 Github Page 的使用、部署方式吧&#xff01; 一、进入 Github 访问&#xff1a;github.com 如果你没有 github…

Redisson(分布式锁、限流)

注意Redisson是基于Redis的&#xff0c;所以必须先引入Redis配置&#xff08;参考SpringBoot集成Redis文章&#xff09; 1. 集成Redisson 引入依赖 <!-- 二选一,区别是第一个自动配置&#xff0c;第二个还需要手动配置也就是第二步自定义配置&#xff0c;注意版本号&…

【吊打面试官系列-MyBatis面试题】MyBatis 框架适用场合?

大家好&#xff0c;我是锋哥。今天分享关于 【MyBatis 框架适用场合 &#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; MyBatis 框架适用场合&#xff1f; 1、MyBatis 专注于 SQL 本身&#xff0c;是一个足够灵活的 DAO 层解决方案。 2、对性能的要求很高&#…

苹果电脑移动硬盘不能写入怎么办 读取移动硬盘的磁盘管理软件 Paragon NTFS for Mac永久激活

对于使用苹果电脑的用户们&#xff0c;我们经常会使用到移动硬盘来拷贝大量的文件。一般的移动硬盘的容量都比较大&#xff0c;再加上国内大多数人使用的都是 Windows 系统&#xff0c;为了通用与方便&#xff0c;所以硬盘的分区一般都是 NTFS 格式的。对于 Windows 系统的 NTF…

LLDP 基本原理

LLDP 简介 定义 LLDP&#xff08;Link Layer Discovery Protocol&#xff0c;链路层发现协议&#xff09;是 IEEE 802.1ab 中定义的第二层发现&#xff08;Layer 2 Discovery&#xff09;协议。 LLDP 提供了一种标准的链路层发现方式&#xff0c;可以将本端设备的主要能力、…

西安高校大学智能制造实验室数字孪生可视化系统平台建设项目验收

随着工业4.0时代的到来&#xff0c;智能制造成为推动制造业转型升级的关键。为了培养学生的创新能力和实践能力&#xff0c;西安高校大学决定建设智能制造实验室&#xff0c;并引入数字孪生技术&#xff0c;构建可视化系统平台。项目旨在通过数字孪生技术&#xff0c;实现对制造…

【吴恩达深度学习笔记系列】Logistic Regression 【理论】

Binary Classification: Logistic Regression: y ^ σ ( w T x b ) \hat{y}\sigma{(w^T xb)} y^​σ(wTxb) using sigmoid function σ 1 1 e − z \sigma \frac{1}{1e^{-z}} σ1e−z1​. 【torch.sigmoid(x)】 Sigmoid ( x ) 1 1 e − x \text{Sigmoid}(x)\frac{1}{…

运维锅总详解Nginx

本文尝试从Nginx特性及优缺点、为什么具有文中所述的优缺点、Nginx工作流程、Nginx最佳实践及历史演进等角度对其进行详细分析。希望对您有所帮助。 Nginx特性及优缺点 Nginx简介 Nginx&#xff08;发音为 “engine-x”&#xff09;是一款高性能的开源Web服务器及反向代理服…

[OtterCTF 2018]Play Time

还是这个程序 。。要找到游戏名字查看 进程 psscan pstree pslist 0x000000007d686b30 Rick And Morty 3820 2728 0x000000000b59a000 2018-08-04 19:32:55 UTC0000 0x000000007d7cb740 LunarMS.exe 708 2728 0x00000000731cb000 2018-08-04 19:27:39 UTC0000…

安全架构概述_1.信息安全面临的威胁

在当今以计算机、网络和软件为载体的数字化服务几乎成为人类赖以生存的手段。与之而来的计算机犯罪呈现指数上升趋势&#xff0c;因此&#xff0c;信息的可用性、完整性、机密性、可控性和不可抵赖性等安全保障显得尤为重要&#xff0c;而满足这些诉求&#xff0c;离不开好的安…

【mysql的行记录格式】

记录头信息 除了变长字段长度列表、NULL值列表之外&#xff0c;还有一个用于描述记录的记录头信息&#xff0c;它是由固定的5个字节组成。5个字节也就是40个二进制位&#xff0c;不同的位代表不同的意思&#xff0c;如图&#xff1a; 记录的真实数据 对于record_format_demo表来…

操作系统期末复习考题二

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文☀️☀️☀️三、总结&#x1f353;&#x1f353;&#x1f353; 一、前言&#x1f680;&#x1f680;&am…

算法-位运算基础

文章目录 前置知识1. 交换两个数2. 比较两个数的大小3. leetcode268 寻找缺失的数字4. leetcode136 只出现一次的数字5. leetcode260 只出现一次的数字|||6. leetcode137 只出现一次的数字||7. 2/3的幂8. 大于等于该数字的最小2的幂9. leetcode201 数字范围按位与10. 位运算中分…

JAVA笔试题目

1.标识符的使用 2.类名和java文件名的关系 3.java数据类型关系 4.循环体的考验 答案选择C&#xff0c;D的话需要在do前面加上loop:表示跳出当前循环体。 5.三元运算符的类型运算 6.局部变量的使用 这里需要注意的是c表示当前行代码还是使用原来的数值&#xff0c;下一行代码才…

fiddler抓包工具

概念 概念&#xff1a; Fiddler是一个http协议调试代理工具&#xff0c;它能够记录并检查所有你的电脑和互联网之间的http通讯。 http&#xff1a;不加密&#xff0c;端口为80 https&#xff1a;加密&#xff0c;端口为443 原理&#xff1a; 其实就在访问服务器时&#xff0…

005-GeoGebra基础篇-GeoGebra的矩形

上一篇关于点的介绍已经触及到了诸多GeoGebra的基础操作&#xff0c;这一篇我们根据画矩形&#xff0c;继续探索GeoGebra。 目录 一、最粗暴的方式绘制矩形1. 使用“Polygon”工具直接绘制2. 注意看代数列表3. 关于矩形和线段 二、用点和线段绘制矩形&#xff08;1&#xff09;…