例行性工作排程

例行性工作排程分为两类

  1. at

at是只执行一次就结束的指令安排。要想使用at,必须要有atd服务的支持。

  1. crontab

crontab是每隔一段时间自动执行的指令安排。crontab除了可以使用指令执行外,也可以编辑/etc/crontab来支持。让cron生效的服务支持为crond服务。

Linux上常见的例行性工作安排

Linux常会帮我们自动完成一些工作,例如在线更新(on-line update),自动地进行updatedb(locate的文件名数据库),自动作登录档分析。什么是登录档呢,就是Linux会把我们系统内发生的各种信息记录下来,该记录的档案就是登录档。

  1. 登录档轮替(log rotate)

Linux会帮我们完成登录档的轮替,即让旧的记录数据和新的记录数据分开存放,同时保持登录档的大小不要太大。

  1. 登录文件分析(logwatch)

系统还会帮我们进行登录文件的分析,该文件的分析可以通过程序logwatch完成。

  1. 建立locate数据库

文件名数据库放置在/var/lib/mlocate/中,系统会帮我们调用updatedb进行更新

  1. 建立whatis数据库
  2. RPM软件登录文件的建立
  3. 移除暂存档

系统会自动调用tmpwatch指令删除暂存档

  1. 与网络服务有关的分析行为

系统自动分析软件的登录文件等。

仅执行一次的工作排程 at

atd服务的启动与开机自启动

# 启动atd服务
/etc/init.d/atd restart # 设置atd服务开机自启动
chkconfig atd on

at的工作方式

需要将at的工作安排以文本的形式写到/var/spool/at/目录内,然后就等atd服务取用与执行吧。

可以通过 /etc/at.deny/etc/at.allow 这两个配置文件设置at的使用限制(一个账号写一行)

只有在/etc/at.allow中的使用者才能使用at

如果没有档案/etc/at.allow,会查看/etc/at.deny,在该档案内的使用者不能使用at

如果两个档案都不存在,那么只有root用户才能使用at

可以通过at命令设置at排程。batch设置系统有空时才进行at任务。atq查询at排程。atrm删除at任务。

循环执行的工作排程 cron

通过指令crontab进行控制,工作排程会记录到/var/spool/cron/username目录内。cron执行的每一项工作都会记录到/var/log/cron登录档中

与at相同,可以通过 /etc/cron.allow/etc/cron.deny 这两个配置文件设置crontab的使用限制(一个账号写一行)

只有在/etc/cron.allow中的使用者才能使用crontab

如果没有档案/etc/cron.allow,会查看/etc/cron.deny,在该档案内的使用者不能使用crontab

如果两个档案都不存在,那么只有root用户才能使用crontab

可以通过命令crontab设置循环执行的工作排程。

crontab的档案格式

分钟    小时    日期    月份    周    指令
0 12 * * * mail username -s "at 12:00" < /home/username/.bashrc # 分钟 0~59
# 小时 0~23
# 日期 1~31
# 月份 1~12
# 周 0~7,0和7都代表星期天
# ---- 特殊字符 ----
# * 星号,任何时刻都接受
# , 逗号,代表或的意思
# - 减号,表示时间范围 如 8-20
# */n ,表示每隔n单位间隔,也可以0-59/5 # 例子:5月1日发23点59分 发邮件给kiki
59 23 1 5 * mail kiki < /home/username/lover.txt # 例子:每5分钟执行一遍 /home/username/test.sh
*/5 * * * * /home/username/test.sh # 最好使用绝对路径

crontab 系统配置文件 /etc/crontab

/etc/crontab 是系统的的例行性排程。而通过命令crontab -e进行编辑的是用户的例行性排程。

在linux下,系统会自动地每分钟读取一遍/etc/crontab。但在其他一些unix系统中,系统会把/etc/crontab读进内存中,因此在别的系统中,每次修改完/etc/crontab,可能就需要重新启动crond服务/etc/init.d/crond restart

/etc/crontab的内容如下所示

SHELL=/bin/bash    #使用哪种shell接口
PATH=/sbin:/bin:/usr/sbin:/usr/bin #执行程序搜索路径
MAILTO=root #若有stdout或stderr,会通过mail将数据送给它
HOME=/ #默认此shell的家目录
# run-parts
# 分 时 日 月 周 执行者身份 指令串
01 * * * * root run-parts /etc/cron.hourly #每小时
02 4 * * * root run-parts /etc/cron.daily #每天
22 4 * * 0 root run-parts /etc/cron.weekly #每周日
42 4 1 * * root run-parts /etc/cron.monthly #每个月1号 # root 是执行者的身份
# run-parts是一个bash脚本,会将目录下的指令抓出来执行

crontab注意事项

  1. 注意排程的时间分流,不要挤在一个时间执行
  2. 取消不要的输出项目,数据重导向到/dev/null
  3. 可以检查/var/log/cron,观察是否有非自己设定的cron在执行
  4. 周和日月不能同时存在

可唤醒停机期间的工作任务 anacron

anacron执行的时间一般有两个

  1. 系统开机期间
  2. 写入crontab的排程中

anacron是一只程序,并已经写到crontab的排程中。

/etc/anacrontab的内容

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root #天数 延迟分钟数 job名称 指令串
1 65 cron.daily run-parts /etc/cron.daily
7 70 cron.weekly run-parts /etc/cron.weekly
30 75 cron.monthly run-parts /etc/cron.monthly # anacron的时间记录文件为
# /var/spool/anacron/cron.daily
# /var/spool/anacron/cron.weekly
# /var/spool/anacron/cron.monthly

执行过程

若下达 anacron -s cron.daily ,其过程为

  1. 由/etc/anacrontab分析cron.daily这项工作的天数为1天
  2. 由/var/spool/anacron/cron.daily取出最近一次执行anacron的时间戳
  3. 由上个步骤和目前的时间进行比较,若差异天数为1天以上包括一天,则准备执行指令
  4. 根据/etc/anacrontab的设定,延迟65分钟
  5. 延迟时间过后,开始执行指令,即run-parts /etc/cron.daily
  6. 执行完毕后,anacron程序结束

查看 anacron 是否开机时主动执行

chkconfig --list anacron
# 通过查看run level为3和5的情况
# 若为on则开机主动执行

命令

  1. at (单一工作排程)
at [-mldv] TIME
at -c 工作号码
# 选项与参数
# -m 工作完成后,以email形式通知工作者工作完成了
# -l at -l相当于atq,列出系统上所有该用户的at排程
# -d at -d相当于atrm,取消一个at排程中的工作
# -v 使用较明显的格式显示
# -c 列出该项工作的实际指令内容
# TIME 指定at工作的时间
# TIME 格式
# HH:MM 例如 04:00
# HH:MM YYYY-mm-dd 例如 04:00 2018-01-01
# HH:MM[am|pm] [Month] [Date] 例如 04:00pm March 17
# HH:MM[am|pm] + number[minutes|hours|days|weeks] 例如 now + 5 minutes 或者 04pm + 3 days # 5分钟后将/root/.bashrc发邮件给root自己
at now + 5 minutes
at> /bin/mail root -s "test at" < /root/.bashrc
at> <EOT> #通过按Ctrl+D结束输入 # 列出第4项的内容
at -c 4 # 最好使用绝对路径
# stdout/stderr会转到执行者的mailbox
# 改用 echo "hello" > /dev/tty1
  1. atq (查询at排程)
  2. atrm (移除at排程)
# 根据job id移除at排程
atrm jobId
  1. batch (系统有空时才进行at任务)

batch用法和at相同,只是在系统CPU工作负载小于0.8时才会进行工作任务。

  1. crontab (设置循环性工作排程)
crontab [-u username] [-l|-e|-r]
# 选项和参数
# -u 只有root才能执行这个任务,帮其他使用者建立和删除crontab工作排程
# -e 编辑crontab的内容
# -l 查阅crontab的内容
# -r 移除所有的crontab工作内容 # 让 username 用户每天12:00发信给自己
# 0 12 * * * mail username -s "at 12:00" < /home/username/.bashrc # 设置cron排程
crontab -e
# 查看cron排程
crontab -l
# 移除所有cron排程,如果只需要移除一个排程,需要crontab -e进行编辑
crontab -r
  1. anacron (可唤醒停机期间的工作任务)
anacron [-sfn] [job]
anacron -u job
# 参数和选项
# -s 开始连续执行各项job,并根据时间记录文件判断是否进行
# -f 强制进行,并不会去判断时间记录文件
# -n 立刻进行为执行的任务,而不延迟
# -u 仅更新时间记录文件,不进行任何工作
# job 由/etc/anacrontab定义的各项工作名称

参考

鸟哥的Linux私房菜 第三版

linux备忘录-例行性工作排程 (crontab)的更多相关文章

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

    1. 什么是例行性工作排程 1.1 Linux 工作排程的种类: at, crontab 1.2 Linux 上常见的例行性工作2. 仅运行一次的工作排程 2.1 atd 的启动与 at 运行的方式: ...

  2. 第十六章、例行性工作排程 (crontab)

    1. 什么是例行性工作排程 1.1 Linux 工作排程的种类: at, crontab 1.2 Linux 上常见的例行性工作 2. 仅运行一次的工作排程 2.1 atd 的启动与 at 运行的方式 ...

  3. 鸟哥私房菜基础篇:例行性工作排程 (crontab)习题

    猫宁!!! 参考:http://cn.linux.vbird.org/linux_basic/0430cron.php 1-今天假设我有一个命令程序,名称为: ping.sh 这个档名!我想要让系统每 ...

  4. Linux学习-循环执行的例行性工作排程

    循环执行的例行性工作排程则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的例行性工作,因此这个系统服务是默认启动的. 另外, 由于使用者自己也可以进行例行性工 ...

  5. Linux学习-什么是例行性工作排程

    那么 Linux 的例行性工作是如何进行排程的呢?所谓的排程就是将这些工作安排执行的流程之意! 咱们的 Linux 排程就是透过 crontab 与 at 这两个东西! Linux 工作排程的种类: ...

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

    说白了,就是一些例行工作的日常执行的排序程序 Linux  工作排程的种类:  at,cron 鸟叔说,atd并不是在所有版本都是开启的,但是centos7默认是开启的 [root@localhost ...

  7. 浅谈 linux 例行性工作 crontab (linux定时任务)

    定时任务大家都挺说过,就好比你手机上的闹钟,到了指定的时候就会响起. 今天在对redis缓存进行定时储存时又操作了一把,发现一些细节,写的不好.大家就将就看吧, 首先 简单介绍一下linux 例行性工 ...

  8. linux例行性工作调度学习(一)

    Linux系统中有一种例行性工作(crontab)可以调度,是通过crontab和at来实现的. 这两种工作调度: 一种是例行性的,就是每隔一定的周期要来办的事项. 一种是突发性的,就是这次做完以后就 ...

  9. Linux学习-仅执行一次的工作排程

    atd 的启动与 at 运作的方式 要使用单一工作排程时,我们的 Linux 系统上面必须要有负责这个排程的服务,那就是 atd 这个玩 意儿. 不过并非所有的 Linux distributions ...

随机推荐

  1. c语言描述的顺序栈实现

    #include<stdio.h> #include<stdlib.h> #define initsize 100 #define ok 1 #define error 0 t ...

  2. php中的变量作用域

    <?php include_once $_SERVER['DOCUMENT_ROOT'].'/includes/db.inc.php'; function totalJokes() { try{ ...

  3. 整理 45 道 CSS 基础面试题(附答案)

    1.介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的? 标准盒子模型:宽度=内容的宽度(content)+ border + padding + margin低版本IE盒子模型:宽度 ...

  4. 课时70.id选择器和类选择器(理解)

    1.id和class的区别? id相当于人的身份证不可以重复 class相当于人的名称可以重复 1.2 一个HTML标签只能绑定一个id名称 一个HTML标签可以绑定多个class名称 2.id选择器 ...

  5. spring入门学习感悟

    1:ioc:控制反转 控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是有外部容器负责创建和维护的(获取依赖对象的过程被反转了) 2:di:依赖注入,它是一种控制反转的一种实现方法,ioc容器 ...

  6. Eclipse关联tomcat

    一,添加Tomcat Windows-->Preferences-->Server-->Runtime Enviroment添加一个tomcat,这里选择tomcat8.0 Next ...

  7. 路由器基础设置之ospf

    我们将以上面的拓扑图来进行实验,要用ospf的协议达到全网互通的效果 router1: enable 进入特权模式 config t 进入全局配置模式 interface L0 ip address ...

  8. 进一步理解 frame 和 bounds

    总结一下 iOS中 frame 和 bounds之间的区别    综述 frame和bounds都是描述一块矩形区域,但是他们是有区别的 frame:可视范围,可以理解为控件的大小,把控件当作边缘很薄 ...

  9. Centos7安装FastDFS

    离线安装包准备: 将相关的安装包上传到 /usr/local 目录,安装包下载 并解压到当前目录 1.安装 gcc yum install -y gcc gcc-c++ 2.安装 perl yum i ...

  10. ECSHOP和SHOPEX快递单号查询中通插件V8.6专版

    发布ECSHOP说明: ECSHOP快递物流单号查询插件特色 本ECSHOP快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递.顺丰快递.圆通快递.EMS快递.汇通快递.宅 ...