首页 > 其他分享 >第十五章 例行性工作排程(crontab)

第十五章 例行性工作排程(crontab)

时间:2023-07-31 11:13:23浏览次数:35  
标签:atd 工作 crontab cron etc 第十五章 排程

第十五章 例行性工作排程(crontab)

15.1 什么是例行性工作排程

  有的工作是例行性的,有的工作则是临时发生的。

15.1.1 工作排程的种类:at,cron

  • at: at是个可以处理仅执行一次就结束排程的指令,不过要执行at时,必须要有atd这个服务的支援才行。
  • crontab: crontab这个指令所设定的工作将会循环的一直进行下去可循环的时间为分钟、小时、每周、每月或每年等。crontab除了可以使用指令执行外,亦可编辑/etc/crontab来支持。至于让crontab可以生效的服务则是crond这个服务喔!

15.1.2 CentOS Linux系统上常见的例行性工作

  • 进行登录档的轮替(log rotate)
  • 登录文件分析logwatch的任务
  • 建立locate的数据库
  • man page查询数据库的建立
  • RPM软件登录文件的建立
  • 移除暂存档
  • 与网络服务有关的分析行为

15.2 仅执行一次的工作排程

15.2.1 atd的启动与at运作的方式

systemctl restart atd # 重新启动atd这个服务
systemctl enable atd # 让这个服务开机就自动启动
systemctl status atd # 查阅一下atd目前的状态
  • at的运作方式
    事实上,我们使用at这个指令来产生所要运作的工作,并将这个工作以文本文件的方式写入/var/spool/at/目录内,该工作便能等待atd这个服务的取用与执行了。就这么简单。
    我们可以利用/etc/at.allow与/etc/at.deny这两个文件来进行at的使用限制呢!加上这两个文件后,at的工作情况其实是这样的:
  1. 先找寻/etc/at.allow这个文件,写在这个文件中的使用者才能使用at,没有在这个文件中的使用者则不能使用at(即使没有写在at.deny当中)
  2. 如果/etc/at.allow不存在,就寻找/etc/at.deny这个文件,若写在这个at.deny的使用者则不能使用at,而没有在这个at.deny文件中的使用者,就可以使用at咯
  3. 如果两个文件都不存在,那么只有root可以使用at这个指令。

15.2.2 实际运作单一工作排程

at [-mldv] TIME
at -c 工作号码
选项与参数:
-m: 当at的工作完成后,即使没有输出讯息,亦以email通知使用者该工作已完成
-l: at -l相当于atq,列出目前系统上所有该用户的at排程
-d: at -d相当于atrm,可以取消一个在at排程中的工作
-v: 可以使用较明显的时间格式显示出at排程中的任务栏表
-c: 列出后面接的该工作的实际指令内容。
TIME:时间格式,这里可以定义出【什么时候要进行at这项工作】的时间,格式有:
HH:MM    ex>04:00 在今日的HH:MM时刻进行,若该时刻已过,则明天的HH:MM进行此工作
HH:MM YYYY-MM-DD ex>04:00 2015-07-30
HH:MM[am|pm] [Month] [Date] ex> 04pm July 30
HH:MM[am|pm] + number [minutes|hours|days|weeks] ex>now + 5 minutes  ex> 04pm + 3 days
范例:
at now + 5 minutes 
at> /bin/mail -s "testing at job" root < /root/.bashrc
at><EOF>
  • at工作的管理
    atq
    atrm (jobnumber)
  • batch: 系统有空时才进行背景工作
    其实batch是利用at来进行指令的下达啦!只是加入一些控制参数而已。这个batch神奇的地方在于:他会在CPU的工作负载小于0.8的时候,才进行你所下达的工作任务啦!

15.3 循环执行的例行性工作排程

  循环执行的例行性工作排程则是由cron(crond)这个系统服务来控制的。

15.3.1 使用者的设定

  与at同样的,我们可以限制使用crontab的使用者帐号喔!使用的限制数据有:

  • /etc/cron.allow:
  • /etc/cron.deny

  当用户使用crontab这个指令来建立工作排程之后,该工作就会被记录到/var/spool/cron/里面去了,而且是以帐号来作为判别的喔!举例来说,dmtsai使用crontab后,他的工作会被记录到/var/spool/cron/dmtsai里头去!但请注意,不要使用vi直接编辑该文件,因为可能由于输入语法错误,会导致无法执行cron喔!

crontab [-u username] [-l|-e|-r]
选项与参数:
-u: 只有root才能进行这个任务,亦即帮其他使用者建立/移除crontab工作排程
-c: 编辑crontab的工作内容
-l: 查阅crontab的工作内容
-r: 移除所有的crontab工作内容,若仅要移除一项,请用-e去编辑。

  预设情况下,任何使用者只要不被列入/etc/cron.deny当中,那么他就可以直接下达crontab -e去编辑自己的例行性命令了!整个过程就如同上面提到的,会进入vi的编辑画面,然后以一个工作行来编辑,编辑完毕之后输入“:wq”储存后离开就可以了!而每项工作(每行)的格式都是具有六个字段,这六个字段的意义为:

代表意义 分钟 小时 日期 月份 指令
数字范围 0-59 0-23 1-31 1-12 0-7 指令

另外,还有一些辅助字符:

特殊字符 代表意义
* 任何时刻
,(逗号) 分隔时段
-(减号) 时间范围
/n n为数字,亦即是"每隔n单位时间"的意思,例如*/5或0-59/5,每5分钟一次

15.3.2 系统的配置文件:/etc/crontab,/etc/cron.d/*

  这个"crontab -e"是针对使用者的cron来设计的,如果是【系统的例行性任务】时,该怎么办呢?你只要编辑/etc/crontab这个文件就可以啦!
  基本上,cron这个服务的最低侦测限制是【分钟】,所以【cron会每分钟去读取一次/etc/crontab与/var/spool/cron里面的数据内容】,因此,只要你编辑完/etc/crontab这个文件,并且将他储存之后,那么cron的设定就自动的会来执行了!

  • crond服务读取配置文件的位置
    一般来说,crond预设有三个地方会有执行脚本配置文件,他们分别是:
    • /etc/crontab
    • /etc/cron.d/*
    • /var/spool/cron/*

标签:atd,工作,crontab,cron,etc,第十五章,排程
From: https://www.cnblogs.com/evan-whc/p/17592912.html

相关文章

  • Linux定时任务之crontab
    Linux定时任务之crontab​cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:crontab-u//设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数crontab-l//列出某个用户cron服务的详细内容crontab-r//删除没个用户的cr......
  • crontab 制定定时任务怎么弄
    要使用crontab创建定时任务,请按照以下步骤进行操作:1.打开终端或命令提示符。2.输入以下命令以编辑当前用户的crontab文件:```shellcrontab-e```3.如果是首次编辑crontab文件,系统会要求选择一个文本编辑器。选择你喜欢的编辑器,并按照系统提示进行操作。4.在打开的......
  • crontab
    crontab提交和管理用户的需要周期性执行的任务补充说明crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则......
  • crontab定时任务
    crontab定时任务[root@master~]#cat/etc/crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=root#Fordetailsseeman4crontabs#Exampleofjobdefinition:#.----------------minute(0-59)#|.-------------hour(0-23)#||.--......
  • 第十五章电流和电路
              ......
  • 记一次线上bug:crontab 被意外清空
    记一次线上bug:crontab被意外清空目录记一次线上bug:crontab被意外清空问题概述问题排查问题复现其他测试总结又是一次难忘的经历。问题概述同事反馈,某台服务器的crontab被清空了.看了cron运行日志来看,问题出在这里:Jul310:01:2410-10-65-235crontab[19333]:(root)REP......
  • [GPT] Linux 如何查看 crontab 的运行记录
     要查看crontab的运行记录,可以使用以下命令: $grepCRON/var/log/syslog或者 $tail /var/log/syslog 这将在/var/log/syslog文件中查找包含"CRON"关键字的日志条目,其中包含有关crontab任务运行的信息。请注意,这个命令假设你的系统日志文件位于/var/log/syslog......
  • linux计划任务crontab的使用
    编辑计划任务:   crontab-e查看计划任务:   crontab-l 使用实例:实例1:每1分钟执行一次command命令:*****command实例2:每小时的第3和第15分钟执行命令:3,15****command实例3:在上午8点到11点的第3和第15分钟执行命令:3,158-11***command实例4:每隔两天的......
  • crontab -l没有定时任务却还有任务在执行
    第一个可能:定时任务设置在了其他账号解决方案:切换到其他账号,切换到root账号下sudo-icrontab-l查看是否有任务列表crontab-e编辑crontab-r删除当前账号下的定时任务第二个可能:定时任务设置在了系统下的crontab列表中解决方案:cat/etc/crontab查看系统级定时任......
  • 【Linux】systemd.timer replace the crontab or at jobs
    systemd架构学习Systemd的第一步,就是搞懂"单元"(unit)是什么。简单说,单元就是Systemd的最小功能单位,是单个进程的描述。一个个小的单元互相调用和依赖,组成一个庞大的任务管理系统,这就是Systemd的基本思想。由于Systemd要做的事情太多,导致单元有很多不同的种类,大概一......