Linux系统下的延迟任务及定时任务

news2025/7/19 3:44:21

1、延迟任务

概念:

在系统中我们的维护工作大多数时在服务器行对闲置时进行
我们需要用延迟任务来解决自动进行的一次性的维护
延迟任务时一次性的,不会重复执行
当延迟任务产生输出后,这些输出会以邮件的形式发送给延迟任务发起者
RHEL9 中默认系统中的所有普通用户都可以发起延时任务

at命令用法(发起延迟命令)

在系统中我们可以使用 at 命令来发起延迟任务
  • at 命令执行是调用的是 atd 服务,即使系统最小化安装 atd 也会被安装到系统中
  • at 任务信息存放在系统中/var/spool/at目录中
  • at 任务的日志文件被存放到/var/log/cron中
  • at 任务执行时如果遇到系统处于关闭状态,那么在开启时 atd 任务会检测未执行的任务并且立即执行

基本用法

前置条件:【 # systemctl status atd.service 查看延时任务有无开启】atd 是系统延时任务的守护进程,如果此程序关闭,那么系统延时任务无法使用。

at 用于安排一次性延迟任务,格式为 at [参数] [时间],输入命令后按 Ctrl+D 保存(会显示<EOT>)。

at 命令参数

at命令常用参数
-m当任务完成之后,即使没有标准输出,将给用户发送邮件(启用邮件需建立软件仓库并安装邮件系统)
-latq的别名,可列出目前系统上面的所有该用户的at调度
-datrm的别名,可以取消一个在at调度中的工作
-r删除任务(效果和 -d 类似)
-v使用较明显的时间格式,列出at调度中的任务列表
-V显示at的版本
-c可以列出后面接的该项工作的实际命令内容
-f从文件中读取任务

at 命令的时间表示方法

  • HH:MM 在今天的HH小时MM分钟执行,如果今天的这个时间点已经过了,则明天执行
  • HH:MM YYYY-MM-DD 强制规定在某年某月的某一天的特殊时刻进行该工作
  • now + 2 minutes 从现在开始几分钟minutes, hours, days, or weeks

格式示例:

  at now +5 minutes       5分钟后执行

  at 14:30                       今日14:30执行

  at 2:30 tomorrow         明天2:30执行

  at teatime                    16:00(支持关键词如 teatime、midnight)

 如何非交互的设定延迟任务

在生产环境中我们通常会用脚本来设定一个或多个延迟任务但是at任务的执行需要交互的进行,这样无法满足脚本自动化运行,输入重定向可以解决交互问题:

延迟任务的安全优化

  • at任务在执行时首先会查看执行者是否在名单中
  • 系统中默认只存在黑名单/etc/at.deny,写入此文件中的用户会被禁止使用at任务
  • 在系统中可以手动建立白名单/etc/at.allow,当此文件出现黑名单不会被检测
  • 白名单出现只有root用户和白名单用户可以执行at任务
  • 如果系统中没有黑白名单那么只有root用户可以执行任务
  • 黑白名单为用户列表,每个用户一行

 

 二、定时任务

定时任务介绍

  • 和延迟任务类似,我们可以用crontab来解决自动进行的周期性的维护
  • 定时任务类似手机闹钟,会重复执行
  • 当定时任务产生输出后,这些输出会以邮件的形式发送给延迟任务发起者
  • RHEL9中默认系统中的所有普通用户都可以发起定时任务

定时任务发起 

  • # systemctl status crond.service     【定时任务的守护进程】
  • 在系统中我们可以使用crontab命令来发起用户级定时任务
  • 在系统中/etc/cronfilename 是系统级定时任务,只有root用户可以发起
  • 定时任务执行是调用的是crond服务,即使系统最小化安装crond也会被安装到系统中
  • 定时任务信息存放在系统中/var/spool/cron目录中,存放文件和发起人名称一致
  • 定时任务的日志文件被存放到/var/log/cron
  • 定时任务执行时如果遇到系统处于关闭状态,那么在开启时crond任务会检测未执行的任务并且立即执行

发起用户级周期行任务 

周期任务发起方式(crontab 命令)

crontab 命令的执行格式为: crontab –u 用户 –e

crontab命令参数

crontab命令参数                   
-u用来设定某个用户的 crontab 服务此参数一般有 root 用户来运行
file用来设定某个用户的 crontab 服务此参数一般有 root 用户来运行
-e编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。
-l显示某个用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。
-r从 /var/spool/cron 目录中删除某个用户的 crontab 文件
-i在删除用户的 crontab 文件时给确认提示。
crontab 在设定定时任务是会以 vi 命令打开临时文件,在保存时会把内容同步到 /var/spool/cron

文件时间表示格式

文件格式为:分 时 天 月 周 执行动作

crontab 时间字段为五个星号(* * * * *),分别表示:

分钟(0-59)     小时(0-23)     日(1-31)     月(1-12)     周几(0-7, 0和7均为周日)

例:11 11 * * * echo hello # 每天 11 11 分执行 echo hello 命令
常用符号
*任意值
多个值(如 1,3,5)
-范围(如 1-5)
*/n步长(如 /3 每3单位)

*每个
* * * * *
每分钟
1,51和511,05***1:10和5:00
1-51到5*1-5****1点到5点的每分钟
*/5每隔5*/5****每隔5分钟

 crontab用户级任务管理

编辑任务

crontab -e                 编辑当前用户的任务

查看任务

crontab -l                 列出当前用户的任务

删除任务

crontab -r                删除所有任务

发起系统级别的周期任务

系统级别crontab目录详解

/etc/cron.d系统自定义周期任务
/etc/cron.daily
每天周期任务
/etc/cron.hourly
每小时周期任务
/etc/cron.monthly
每月周期任务
/etc/cron.weekly
每周周期任务

自定义周期任务设置方式

# vim /etc/cron.d/job
分钟     小时     天       月        周       用户      动作
1        09-17     *         *          *        root       date
以root身份每天9点-17点每1分执行date

 crontab用户级安全限制

通过 /etc/cron.allow 和 /etc/cron.deny 控制权限

规则优先级:

  • 若 cron.allow 存在,仅允许其中的用户使用 crontab。
  • 若 cron.allow 不存在,检查 cron.deny,拒绝其中的用户。
  • 若两者均不存在,默认行为因系统而异(通常允许所有用户)。

配置示例:

  echo "admin" >> /etc/cron.allow   仅admin可使用cron

  echo "guest" >> /etc/cron.deny    禁止guest使用cron

定时任务执行优化

定时任务在执行时首先会查看执行者是否在名单中
系统中默认只存在黑名单/etc/cron.deny,写入此文件中的用户会被禁止使用定时任务
在系统中可以手动建立白名单 /etc/cron.allow, 当此文件出现黑名单不会被检测
白名单出现只有 root 用户和白名单用户可以执行定时任务
如果系统中没有黑白名单那么只有 root 用户可以执行任务
黑白名单为用户列表,每个用户一行
黑白名单只针对用户级定时任务进行限制

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

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

相关文章

【网络原理】数据链路层

目录 一. 以太网 二. 以太网数据帧 三. MAC地址 四. MTU 五. ARP协议 六. DNS 一. 以太网 以太网是一种基于有线或无线介质的计算机网络技术&#xff0c;定义了物理层和数据链路层的协议&#xff0c;用于在局域网中传输数据帧。 二. 以太网数据帧 1&#xff09;目标地址 …

相或为K(位运算)蓝桥杯(JAVA)

这个题是相或为k&#xff0c;考察相或的性质&#xff0c;用俩个数举例子&#xff0c;011001和011101后面的数不管和哪个数相或都不可能变成前面的数&#xff0c;所以利用这个性质我们可以用相与运算来把和k对应位置的1都积累起来&#xff0c;看最后能不能拼起来k如果能拼起来k那…

AI汽车时代的全面赋能者:德赛西威全栈能力再升级

AI汽车未来智慧出行场景正在描绘出巨大的商业图景&#xff0c;德赛西威已经抢先入局。 在2025年上海车展开幕前夕&#xff0c;德赛西威发布2030年全新使命愿景——“创领安全、愉悦和绿色的出行生活”&#xff0c;并推出全栈式智慧出行解决方案Smart Solution3.0、车路云一体式…

学习Python的第四天之网络爬虫

30岁程序员学习Python的第四天之网络爬虫的Scrapy库 Scrapy库的基本信息 Scrapy库的安装 在windows系统中通过管理员权限打开cmd。运行pip install scrapy即可安装。 通过命令scrapy -h可查看scrapy库是否安装成功. Scrapy库的基础信息 scrapy库是一种爬虫框架库 爬虫框…

5、开放式PLC梯形图编程组件 - /自动化与控制组件/open-plc-programming

76个工业组件库示例汇总 开放式PLC编程环境 这是一个开放式PLC编程环境的自定义组件&#xff0c;提供了一个面向智能仓储堆垛机控制的开放式PLC编程环境。该组件采用苹果科技风格设计&#xff0c;支持多厂商PLC硬件&#xff0c;具有直观的界面和丰富的功能。 功能特点 多语…

linux中常用的命令(三)

目录 1- ls(查看当前目录下的内容) 2- pwd (查看当前所在的文件夹) 3- cd [目录名]&#xff08;切换文件夹&#xff09; 4- touch [文件名] &#xff08;如果文件不存在&#xff0c;新建文件&#xff09; 5- mkdir[目录名] &#xff08;创建目录&#xff09; 6-rm[文件名]&…

Java 中 AQS 的实现原理

AQS 简介 AQS(全称AbstractQueuedSynchronizer)即抽象同步队列&#xff0c;它是实现同步器的基础组件&#xff0c;并发包中锁的底层就是使用AQS实现的。 由类图可以看到&#xff0c;AQS是一个FIFO的双向队列&#xff0c;其内部通过节点head和tail记录队首和队尾元素&#xff0…

『Python学习笔记』ubuntu解决matplotlit中文乱码的问题!

ubuntu解决matplotlit中文乱码的问题&#xff01; 文章目录 simhei.ttf字体下载链接&#xff1a;http://xiazaiziti.com/210356.html将字体放到合适的地方 sudo cp SimHei.ttf /usr/share/fonts/(base) zkfzkf:~$ fc-list | grep -i "SimHei" /usr/local/share/font…

鸿蒙知识总结

判断题 1、 在http模块中&#xff0c;多个请求可以使用同一个httpRequest对象&#xff0c;httpRequest对象可以复用。&#xff08;错误&#xff09; 2、订阅dataReceiverProgress响应事件是用来接收HTTP流式响应数据。&#xff08;错误&#xff09; 3、ArkTS中变量声明时不需要…

C++23 新特性:深入解析 std::views::join_with(P2441R2)

文章目录 std::views::join_with 基本用法处理字符串集合std::views::join_with 与其他视图的结合使用总结 随着C23标准的逐步推进&#xff0c;我们迎来了许多令人兴奋的新特性&#xff0c;其中之一就是 std::views::join_with。这个新特性是C23中引入的视图适配器&#xff0c…

数据可视化大屏——智慧社区内网比对平台

综述分析&#xff1a; 智慧社区内网数据比对信息系统 这段代码实现了一个智慧社区内网数据比对信息系统的前端界面&#xff0c;采用三栏式布局展示各类社区安全相关数据。界面主要由左侧数据统计、中间地图展示和右侧数据分析三部分组成&#xff0c;使用了多种图表可视化技术…

Jenkins企业级实战

目标 在Windows操作系统上使用Jenkins完成代码的自动拉取、编译、打包、发布工作。 实施 1.安装Java开发工具包&#xff08;JDK&#xff09; Jenkins是基于Java的应用程序&#xff0c;因此需要先安装JDK。可以从Oracle官网或OpenJDK下载适合的JDK版本。推荐java17版本&#x…

uniapp-商城-52-后台 商家信息(商家信息数据,云对象使用)

1、概述 已经通过好几个篇幅来说明商家信息&#xff0c;包括logo、商家名称&#xff0c;地址&#xff0c;电话以及商家简介。通过表单组件和标签&#xff0c;以及我们的文件上传标签&#xff0c;都做了说明。&#xff08;logo上传&#xff0c;用的文件上传组件是上传到公共的数…

MySQL 索引设计宝典:原理、原则与实战案例深度解析

目录 前言第一章&#xff1a;索引设计的基础原则 (知其然&#xff0c;更要知其所以然)第二章&#xff1a;实战案例&#xff1a;电商订单系统的索引设计第三章&#xff1a;索引设计的实践流程总结结语 &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜…

C#上传文件到腾讯云的COS

测试环境&#xff1a; vs2022 .net 6控制台应用程序 测试步骤如下&#xff1a; 1 添加子用户&#xff0c;目前是为了拿到secretId和secretKey&#xff0c;打开添加子用户界面链接&#xff1a;https://console.cloud.tencent.com/cam 并为子用户添加API 密钥 2 通过链接htt…

C PRIMER PLUS——第9节:动态内存分配、存储类别、链接和内存管理

目录 1.动态内存分配 1.1 malloc 函数 1.2 calloc 函数 1.3 realloc 函数 1.4 free 函数 1.5常见错误 1.6综合例题 2.C语言的内存结构 3.存储类别 3.1作用域&#xff08;Scope&#xff09; 3.2链接&#xff08;Linkage&#xff09; 3.3存储期&#xff08;Storage Du…

作业...

基础配置 RI R2 R3 R4 R5 例如R1 BGP配置 1,R1和R2之间使用直连接口IP地址来建立EBGP对等体关系 2、R2、R3、R4之间配置OSPF协议&#xff0c;保证各设备之间的网络互通&#xff0c;且通过重发布的方式发布路由 查看R2、R3、R4的OSPF路由表&#xff1a; \ R2、R3、R4使用环…

IC ATE集成电路测试学习——电流测试的原理和方法

电流测试 我们可以通过电流来判断芯片的工作状态时&#xff0c;首先先了解下芯片的电流是如何产生的。 静态电流 理论上&#xff0c;CMOS结构的芯片静态时几乎不耗电 CMOS基本结构&#xff1a;Pmos Nmos 串联当逻辑电平稳定时&#xff1a; ➜ 要么Pmos导通&#xff0c;Nmo…

快速理解动态代理

什么是动态代理(Java核心技术卷1的解释) 动态代理是一种运行时生成代理对象的技术&#xff0c;其本质是通过字节码增强在不修改原始类代码的前提下&#xff0c;动态拦截并扩展目标对象的行为。它通过代理对象对原始方法的调用进行拦截&#xff0c;并在方法执行前后注入自定义逻…

AugmentCode 非常昂贵的新定价

AugmentCode 现在的价格比 Cursor 和 Windsurf 的总和还要贵。 AugmentCode 曾是我开发工作流程的常用工具。出乎意料的是,他们改变了定价结构,让开发者们震惊不已。 原来的30 美元月费已经增长为50 美元月费,这是一个67%的增长。 改变我看法的不仅仅是价格上涨,还有他…