在Linux后台中有许多的默认执行的系统服务,就像我们Windows开机时就有一个exeplorer.exe默认运行,这些系统服务称为系统守护进程。

接下来介绍两个比较重要的系统守护进程atd和crond。

当我们在Linux命令行下输入命令然后按下enter键,命令会立即执行,但是我们有时候并不希望命令立即执行,或者在某个时间自动执行,这个时候我们就用到了atd服务。

atd服务就是可以在未来指定的某个时刻执行指定命令任务的系统守护进程,可

以通过at命令进行设置atd要执行的命令以及执行命令的时间

但是atd服务的一个特点就是,这个命令执行完以后,相关的文件就会自动删除。当我们需要自动分析日志文件、定期备份系统中比较重要的文件的时候,就需要重新定义一个atd服务进程,很显然会很麻烦,因此可以借助crond服务。

crond服务就是可以周期性循环执行指定任务的系统守护进程,可以通过crontab命令设置crond服务周期性执行的命令和时间。可循环时间周期设置的参数有分、时、周、月、[年]等;除了用crontab命令设置crond系统服务以外,也可以通过编辑/etc/crontab文件配置crond服务

atd的启动与at运作的方式

atd服务负责在未来某个时刻执行某个任务,at命令可以对atd进行配置,从而生成所要运行的工作,并将这个工作以文本方式写入/var/spool/at/目录内,这个工作就可以等待atd服务调用了

当然这一切的前提都是我们的林旭安装并启动了atd服务。大部分Linux发行版都默认安装和启动了该服务;如果没有安装我们可以通过yum install at -y安装atd服务。之后通过systemctl atd statue查看该服务的状态,记得要通过命令systemctl enable atd让atd服务开机自动启动

出于安全的考虑,我们并不希望所有用户都可以使用at命令,如果系统被黑客入侵,很有可能利用at服务在系统中装入特定的脚本程序,定期搜索系统重要信息,一般会指定几个信用的用户可以使用at命令

  • 寻找/etc/at.allow文件存在,写在这个文件的用户才能使用at命令
  • 若/etc/at.allow文件不存在,则寻找/etc/at.deny文件,写在该文件的用户不能使用at命令
  • 若两个文件都不存在,那么只有root用户可以使用at命令

注意:在Redhat Linux中由于假设系统上所有的用户都是可以信任的,所以允许所有人使用at命令,/etc/at.deny文件为空,如果想要拒绝某人使用at命令,可以将该用户写入该文件,一个用户写一行!!!

at命令详解

命令格式:at [选项] [时间]

参数

说明

-m

当任务完成之后,即使没有标准输出,也将给用户发送邮件方式告诉用户

-l

atq的别名,可以 列出目前系统上所有的该用户的at待执行命令

-d

atrm的别名,可以删除/取消一个at中的待执行命令

-v

使用较明显的时间格式,列出所有单一执行的例行性工作

-c

可以列出某一例行性工作的实际命令内容

-f

从文件中读取作业

时间格式

参数

说明

HH:MM

在今天的HH小时MM分钟执行,如果今天的这个时间已经过了,则明天执行。例如:04:00

HH:MM YYYY-MM-DD

强制规定在某年某月某日某时某分执行。例如:04:00 2022-05-20

now[am | pm] + 2 minutes/hours/days/weeks

从现在开始的几分钟/小时/天/周执行。例如:now + 5 minutes

04pm + 3 days

HH:MM[am | pm] [Mounth] [Date]

强制某年某月某日某时刻进行。例如:05pm July 30

在使用at命令时会进入一个at shell的环境让用户下达工作指令,最好使用绝对路径来下达指令。因为指令的下达与PATH变量和下达命令时的工作目录有关,比如我在/tmp下达了mv haha /xixi,那个文件将是/tmp/haha,因为at在运行时,会跑到当时下达at指令的工作目录,因此选择绝对路径将会更加靠谱

如何退出at shell式界面 -- ctrl + d

循环执行的例行性工作

用户想要建立循环执行例行性工作,使用的是crontab指令,同样的,出于安全性的考虑,具有与at一样的限制规则,不过黑名单的名字叫做cron.deny;白名单叫做cron.allow,都在/etc下。

当用户使用crontab建立工作进程之后,该项工作就会被记录到/var/spool/cron里面,而且所有工作将以用户进行区别,比如root用户使用了crontab,那么这条记录将会被记录到/var/spool/cron/root中。不过不建议使用vi/vim直接编辑这个文件,可能由于编辑时的语法错误导致cron无法执行;每条例行性工作执行的日志都会被记录到/var/log/cron中。

crontab命令详解

命令格式:crontab [-u user] [ -l/r/e]

选项

说明

-u

只有root才能执行这个选项,帮某个用户新建/删除crontab

-e

编辑crontab的工作内容

-l

查阅crontab的工作内容

-r

删除所有的crontab的工作内容

编辑crontab,使用命令crontab -e

文件格式为:每一行为一个工作,每项工作具有六个字段

代表意义

分钟

小时

日期

月份

命令

数字范围

0-59

0-23

1-31

1-12

0-7 //0和7都代表周日

执行的命令

文件内的特殊字符:

特殊字符

含义

*

代表任何时刻

,

代表分隔时段

代表一段时间范围

/数字

指定时间的间隔频率

场景:我设定每周末备份一次用户数据,但是恰好周日停电了,这个时候要么选择周一手动备份,要么等待下周日再进行备份,不过这与我们当初的设想是相悖的,这个时候就用到一款anacron程序了。

什么是anacron

anacron并不是用来取代crontab,anacron是一个程序,主要是用来解决因为某些不可控原因导致某个crontab中的任务在规定时间执行。anacron默认每一小时被crond服务执行一次,然后anacron再去检测有没有任务没有在期限内被执行,如果有,那就执行;执行所有此类任务之后或没有此类任务,anacron就停止了。

ana是如何知道我们的系统关机的呢?

anacron会读取时间记录文件(timestamps),anacron会去分析现在的时间与时间记录文件上次所记载的上次执行anacron的时间,两者比较后如果发现有差异,那么就是在某时刻没有进行crontab,此时anacron就会开始执行未进行的crontab任务

归根结底anacron是一个程序并非一个服务,anacron每个小时被主动执行一次,因此anacron的配置文件在/etc/cron.hourly下

所以其实也仅仅是执行anacron -s的指令,那就看看anacron这个程序

anacron的语法

anacron [-sfn] [job]

anacron -u [job]

选项

说明

-s

开始连续的执行各项工作,会一句时间记录文件的数据判断是否执行

-f

强制进行,而不去判断时间记录文件的时间戳

-n

立刻执行未进行的任务,而不延迟(delay)等待时间

job

有/etc/anacrontab定义的各项工作名称

在Linux中,anacron每个小时都会给执行一次,但是为了担心anacron误判时间参数,因此/etc/cron.hourly/里面的anacron才会在档名之前加一个0(0anacron),让anacron最先执行,就是为了时间戳先更新,以避免anacron误判crontab尚未进行任何工作的意思

看一下anacron的配置文件:/etc/anacrontab的内容:

天数 工作名称定义 实际要进行的指令串 延迟时间 # 天数单位为天;延迟时间单位为分钟;工作名称定义可自定义,指令串则通常与 crontab 的设定相同!

天数:anacron 执行当下与时间戳 (/var/spool/anacron/ 内的时间纪录文件) 相差的天数,若超过此天数,就 准备开始执行,若没有超过此天数,则不予执行后续的指令。

延迟时间:若确定超过天数导致要执行排程工作了,那么请延迟执行的时间,因为担心立即启动会有其他 资源冲突的问题吧!

工作名称定义:这个没啥意义,就只是会在 /var/log/cron 里头记载该项任务的名称这样!通常与后续的目 录资源名称相同即可。

实际要进行的指令串:有没有跟 0hourly 很像啊!没错!相同的作法啊!透过 run-parts 来处理的!

根据上面的配置文件内容,我们大概知道 anacron 的执行流程应该是这样的 (以 cron.daily 为例):

1. 由 /etc/anacrontab 分析到 cron.daily 这项工作名称的天数为 1 天;

2. 由 /var/spool/anacron/cron.daily 取出最近一次执行 anacron 的时间戳;

3. 由上个步骤与目前的时间比较,若差异天数为 1 天以上 (含 1 天),就准备进行指令;

4. 若准备进行指令,根据 /etc/anacrontab 的设定,将延迟 5 分钟 + 3 小时 (看 START_HOURS_RANGE 的设定);

5. 延迟时间过后,开始执行后续指令,亦即 run-parts /etc/cron.daily 这串指令;

6. 执行完毕后, anacron 程序结束。

如此一来,放置在 /etc/cron.daily/ 内的任务就会在一天后一定会被执行的!因为 anacron 是每个小时被执行一次嘛! 所以,现在你知道为什么隔了一阵子才将 CentOS 开机,开机过后约 1 小时左右系统会有一小段时间的忙碌! 而且硬盘会跑个不停!那就是因为 anacron 正在执行过去/etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/ 里头的未进行的各项工作排程

总结配置文件与目录的关系:

1. crond会主动去读取/etc/crontab, /var/spool/cron/*, /etc/cron.d/*等配置文件,并依据分、时、日、月、周的时间设定去各项工作排程;

2. 根据/etc/cron.d/0hourly 的设定,主动去/etc/cron.hourly/目录下,执行所有在该目录下的执行文件;

3. 因为/etc/cron.hourly/0anacron 这个脚本文件的缘故,主动的每小时执行 anacron ,并呼叫 /etc/anacrontab的配置文件;

4. 根据/etc/anacrontab的设定,依据每天、每周、每月去分析 /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/内的执行文件, 以进行固定周期需要执行的指令。

也就是说,如果你每个周日的需要执行的动作是放置于 /etc/crontab 的话,那么该动作只要过期了就过期了,并不会被抓回来重新执行。 但如果是放置在 /etc/cron.weekly/ 目录下,那么该工作就会定期,几乎一定会在一周内执行一次~如果你关机超过一周, 那么一开机后的数个小时内,该工作就会主动的被执行喔! 真的吗?对!因为 /etc/anacrontab 的定义

基本上,crontab 与 at 都是定时去执行,过了时间就过了!不会重新来一遍~那anacron 则是定期去执行,某一段周期的执行~ 因此,两者可以并行,并不会互相冲突

Linux的例行性工作相关推荐

  1. Linux高级课程----Linux的例行性工作和chrony服务器

    Linux的例行性工作 1.单一的例行性工作:仅处理执行一次就结束了,at -> atd 我们使用 at 命令来生成所要运行的工作,并将这个工作,以文本方式写入/var/spool/at/ 目录 ...

  2. 鸟哥的Linux私房菜(基础篇)- 第十六章、例行性工作排程 (crontab)

    第十六章.例行性工作排程 (crontab) 最近升级日期:2009/09/11 学习了基础篇也一阵子了,你会发现到为什么系统常常会主动的进行一些任务?这些任务到底是谁在配置工作的?如果你想要让自己设 ...

  3. Linux学习笔记39——任务调度:什么是例行性工作调度、仅执行一次的工作调度、循环执行的例行性工作调度、可唤醒停机期间的工作任务

    一.什么是例行性工作调度 1,Linux 工作调度的种类: at, cron 2,CentOS Linux 系统上常见的例行性工作 二,仅执行一次的工作调度 1,atd 的启动与 at 运行的方式 a ...

  4. 例行性工作排程 (crontab)

    http://linux.vbird.org/linux_basic/0430cron.php 1. 什麼是例行性工作排程 1.1 Linux 工作排程的種類: at, crontab 1.2 Lin ...

  5. linux 例行性工作,Linux例行性工作

    Linux例行性工作 Linux:例行性工作 什么是例行性工作? 其实对于例行性工作而言就是在当前环境下周期性进行的必须工作. 在Linux下,有2种例行性工作种类: 一种是突发性,做完以后就没有的那 ...

  6. Linux上使用at单一执行例行性工作,使用crontab循环执行例行性任务以及系统例行任务

    在工作或学习中,我们经常需要对重要的文件进行备份,或者做一些日常性的排查等工作,了解如何在linux上执行例行性工作显得尤为重要! 本文基于Linux上CentOS 7版本进行演示 一.单一执行例行性 ...

  7. RHCE第一天之Linux例行性工作at、crontab详解

    文章目录 一.学习内容总结 1.单一执行的例行性工作at 2.循环执行的例行性工作crontab 二.作业 at和crontab的使用 一.学习内容总结 1.单一执行的例行性工作at 概念: 指仅处理 ...

  8. 【树莓派不吃灰】Linux篇⑩ 学习例行性工作排程(核心概念)

    目录 1. 什么是例行性工作排程 2. 仅运行一次的工作排程 3. 循环运行的例行性工作排程 4. 可唤醒停机期间的工作任务 5. 重点回顾 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好 ...

  9. 例行性工作 排程(crontab)

    一,什么是例行性工作排程? 计划任务:比如每天,每周,每月,每年或者指定时间需要执行的工作任务 1,Linux工作排程的种类:at,cron a)at :at 处理仅执行一次任务,依赖于atd服务 b ...

最新文章

  1. 福利 | Python、深度学习、机器学习、TensorFlow 好书推荐
  2. linux 查看剩余内存
  3. 二. 主流视频编码标准的发展
  4. python3高级语法:__slots__属性、property装饰器、上下文管理协议、__new__方法
  5. Eclipse,myeclipse开发中常用技巧总结
  6. c语言线性表的逆转,数据结构(C语言)设有一个线性表E,将线性表逆置,要求逆线性表占? 爱问知识人...
  7. ROS学习(九)—— rqt_console 和 roslaunch
  8. 2019全球AI人才报告发布:AI专家仅3.6万
  9. apache日志轮转
  10. 开发原生的 Google 眼镜应用 【已翻译100%】(2/2)
  11. Vue 当中的计算属性computed
  12. “0”基础让你学会 GridView (一)
  13. sqlmap使用教程
  14. U盘安装Ubuntu 14.04
  15. JavaScript--对象类型详解
  16. java socket send_Socket send函数和recv函数详解
  17. 头像哟(^U^)ノ~YO
  18. 半导体器件基础03:普通二极管
  19. Python 音频处理以及可视化 Amplitude,MFCC,Mel Spectrogram, librosa 库
  20. 从菜鸟到入门(一)- 开发工具

热门文章

  1. PyQt5最全32 日历之QCalendarWidget日历控件
  2. [QT][?] Found unsuitable Qt version 5.0.2 from /usr/bin/qmake, this code requires Qt 4.x
  3. 人生的本质,就是‬一个人活着不要对别人心存太多期‬待
  4. Gating mechanisms
  5. 领课教育系统 - 开源的微服务分布式在线教育系统
  6. 切图网——用html5建站的10大好处
  7. 计算机系统集成三级级申请条件,计算机系统集成等级申请条件
  8. 如何提高cpu和主存之间的数据交换速率
  9. 交流与直流电机 调速方法 分类 原理 优缺点 应用
  10. 希望所有计算机专业同学看到这篇大一规划