Linux-例行性工作排程

1. 例行性工作排程的种类

  • 一种是例行性的,即每隔一定的周期要执行一次的;
  • 一种是突发性的,即只要做一次就好啦。

  为了要达成以上两个功能,就要使用at和crontab这两个指令啦。

  • at : at是处理仅运行一次就结束排程的命令,不过要运行 at,必须要有 atd 这个服务的支持才行,atd 可能默认并没有启动,那么 at 这个命令就会失效。
  • crontab : crontab 这个命令所配置的任务将会循环一直执行,可循环的时间有分钟、小时、每周、每月或每年等。crontab 除了可以使用命令运行外,亦可编辑 /etc/crontab 来支持。同理,如果要让 crontab 生效,必须有 crond 这个服务支持才行。

2. 运行一次的工作排程

2.1 atd 服务

  在开始使用 at 命令之前,需要查看一下 atd 这个服务是否正在运行:

[[email protected] ~]# service atd status

2.2 at 指令

  工作排程,其实就是通过某种方式产生工作,并且将这些工作排进行程表中;我们使用 at 这个命令来产生所要运行的工作,并将这个工作以文字档的方式写入 /var/spool/at/ 目录内,该工作便能等待 atd 这个服务的取用与运行。

  另外,我们对使用 at 这个指令的账户也是存在限制的,主要通过 /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 这个命令。
[[email protected] ~]# at [-mldv] TIME
[[email protected] ~]# 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 2009-03-17
    强制规定在某年某月的某一天的特殊时刻进行该工作!
  HH:MM[am|pm] [Month] [Date]    ex> 04pm March 17
    也是一样,强制在某年某月某日的某时刻进行!
  HH:MM[am|pm] + number [minutes|hours|days|weeks]
    ex> now + 5 minutes    ex> 04pm + 3 days
    就是说,在某个时间点,再加几个时间后才进行。
范例:再过五分钟后,将输出输入到文件/tmp/test.txt中
[[email protected] ~]# at now + 5 minutes
at> echo "Hello" > /tmp/test.txt
at> <EOT>   <==这里输入 [ctrl] + d 就会出现 <EOF> 的字样,代表结束。
job 4 at 2016-03-14 15:38
# 上面这行信息说明,第 4 个 at 工作将在 2016/03/14 的 15:38 进行!

  当我们使用 at 时会进入一个 at shell 的环境来让使用者下达工作命令,此时,最好使用绝对路径来下达你的命令,因为命令的下达与 PATH 变量有关, 同时与当时的工作目录也有关连,因此使用绝对路径来下达命令,会是一个一劳永逸的方法。

  因为 at 的运行与终端机环境无关,而所有 standard output/standard error output 都会传送到运行者的 mailbox 去,终端机是看不到任何信息的。如果需要将信息输出到当前终端机上,则需要指定,例如,如果当前在 tty1 登陆,就使用echo "Hello" > /dev/tty1 即可。

  at 指定的工作是背景运行的,在使用 at 时,系统会将该项 at 工作独立出当前 bash 环境中,直接交给系统的 atd 程序来接管,因此,当下达了 at 的工作之后就可以立刻离线了,剩下的工作就完全交给 Linux 管理即可。

2.3 at 工作的管理

[[email protected] ~]# atq <== 查看目前主机上面有多少的 at 工作排程
[[email protected] ~]# atrm jobnumber <== 将相应的工作移除

2.4 batch

  batch 下达的工作排程将会在系统有空时才进行背景任务,其实也是利用 at 来进行命令的下达,只是加入了一些控制参数。这个指令会在 CPU 工作负载小于 0.8 的时候,才进行所下达的工作任务。

3. 循环运行的例行性工作排程

3.1 cron (crond) 系统服务

  循环运行的例行性工作排程是由 cron (crond) 这个系统服务来控制的,在使用指令crontab时,需要先查看这个服务是否启动了。

3.2 crontab 指令的运行方式

  crontab 命令也是存在使用限制的,它也是通过文件 /etc/cron.allow 和 /etc/cron.deny 两个文件来做限制的,具体的规则同 at 指令的限制。

  使用 crontab 这个命令创建工作排程之后,该项工作将会被记录到 /var/spool/cron/ 里,而且是以帐号来作为判别的。举例来说,wy 使用 crontab 后, 他的工作会被记录到 /var/spool/cron/wy 里,但需要注意的是,不要使用 vi 直接编辑该文件, 因为可能由于输入语法错误,会导致无法运行 cron 。另外,cron 运行的每一项工作都会被纪录到 /var/log/cron 这个登录档中,所以,如果你的 Linux 不知道有否被植入木马时,也可以搜寻一下 /var/log/cron 这个登录档。

[[email protected] ~]# crontab [-u username] [-l|-e|-r]
选项与参数:
-u  :只有 root 才能进行这个任务,亦即帮其他使用者创建/移除 crontab 工作排程;
-e  :编辑 crontab 的工作内容
-l  :查阅 crontab 的工作内容
-r  :移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 去编辑。
范例:用 wy 的身份在每天的 12:00 发信给自己
[[email protected] ~]$ crontab -e
# 此时会进入 vi 的编辑画面让您编辑工作,每项工作都是一行。
0   12  *  *  * mail wy -s "at 12:00" < /home/wy/.bashrc
#分 时 日 月 周 |<==============命令串========================>|

  每项工作 (每行) 的格式都是具有六个栏位,这六个栏位的意义为:


代表意义

分钟 小时 日期 月份 命令
数字范围 0-59 0-23 1-31 1-12 0-7(0或7代表周日) 命令

  一些辅助的特殊字符的含义:

特殊字符 代表意义
*(星号) 代表任何时刻都接受
,(逗号) 代表分隔时段
-(减号) 代表一段时间范围内
/n(斜线) 那个 n 代表数字,即是每隔 n 单位间隔的意思

3.3 系统的配置档: /etc/crontab

  cron 这个服务的最低侦测限制是“分钟”,所以 cron 会每分钟去读取一次 /etc/crontab 与 /var/spool/cron 里面的数据内容,因此,只要编辑完 /etc/crontab 这个文件,并且将它储存之后,那么 cron 的配置就自动的会来运行。

  这里着重说一下 run-parts 这个命令,它的作用是将后面接的目录内的所有文件拿出来运行。

3.4 注意事项

  • 资源分配不均的问题
  • 取消不要的输出项目
  • 安全的检验
  • 周与日月不可同时并存

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

  如果我们的 Linux 主机不是作为 24 小时全天、全年无休的服务器之用的,那么可能就会有一些工作排程无法在我们的机器上按时执行了,那这些停机期间的工作任务如何来完成呢?这个时候我们就需要 anacron 这个指令来帮助我们开机时来运行未进行的crontab任务。

  anacron 存在的目的就是处理非24小时一直启动的Linux系统的crontab的运行。
  anacron 并不能指定何时运行某项任务,而是以天为单位或者是在启动后立刻进行 anacron 的动作,他会去侦测停机期间应该进行但是并没有进行的crontab任务,并将该任务运行一遍后,anacron就会自动停止。

  anacron 会以一天、七天、一个月为期去侦测系统未进行的crontab任务。

  anacron 的工作原理:anacron 会去分析现在的时间与时间记录档所记载的上次运行 anacron 的时间,两者比较后若发现有差异,那就是在某些时刻没有进行 crontab任务。此时 anacron 就会开始运行未进行的 crontab任务了。所以 anacron 其实也是透过 crontab 来运行的。因此 anacron 运行的时间通常有两个,一个是系统启动期间运行,一个是写入 crontab 的排程中。这样才能够在特定时间分析系统未进行的 crontab 任务。

4.1 anacron 与 /etc/anacrontab

  anacron 其实是一支程序而不是一个服务,这支程序在 CentOS 当中已经进入 crontab 的排程中。

  anacron 的语法:

[[email protected] ~]# anacron [-sfn] [job]..
[[email protected] ~]# anacron -u [job]..
选项与参数:
-s  :开始一连续的运行各项工作 (job),会依据时间记录档的数据判断是否进行;
-f  :强制进行,而不去判断时间记录档的时间戳记;
-n  :立刻进行未进行的任务,而不延迟 (delay) 等待时间;
-u  :仅升级时间记录档的时间戳记,不进行任何工作。
job :由 /etc/anacrontab 定义的各项工作名称。
时间: 2024-10-13 11:40:30

Linux-例行性工作排程的相关文章

linux例行性工作排程

1.例行性排程有两中方式: 1)每隔一定周期就要来办的事项,用crontab指令实现 2)突发性的,就是这次做完后,就没有了用at指令实现,不过这个需要atd服务的支持 2.linux常见的例行性任务有: 1)进行登录档的轮替:linux会将系统所发生的各种信息都记录下来,这就是登录档,随着系统的运行这些登录档会越来越大,导致系统读写效能下降,因此就需要将这些数据按时间的新旧分别存放,这就是登录档的轮替任务 2)登录文件分析:如果系统发生了软件问题,硬件错误,资源安全问题等,绝大部分的错误都会被

Linux例行性工作排程 (crontab)

crontab是Unix和Linux用于设置周期性被执行的指令,是互联网很常用的技术,很多任务都会设置在crontab循环执行,如果不使用crontab,那么任务就是常驻程序,这对你的程序要求比较高,一个要求你的程序是24X7小时不宕机,一个是要求你的调度程序比较可靠,实际工作中,90%的程序都没有必要花这么多时间和精力去解决上面的两个问题的,只需要写好自己的业务逻辑,通过crond这个工业级程序去调度就行了,crond的可靠性,健壮性,是毫无疑问的. 使用者的配置 使用者想要创建循环型工作排程

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

1. 什么是例行性工作排程 1.1 Linux 工作排程的种类: at, crontab 1.2 Linux 上常见的例行性工作 2. 仅运行一次的工作排程 2.1 atd 的启动与 at 运行的方式: /etc/at.deny 2.2 实际运行单一工作排程: at, atq & atrm, batch 3. 循环运行的例行性工作排程 3.1 使用者的配置: /etc/cron.deny, crontab 3.2 系统的配置档: /etc/crontab 3.3 一些注意事项 4. 可唤醒停机期

例行性工作排程 (crontab)

1. 什么是例行性工作排程 1.1 Linux 工作排程的种类: at, crontab 1.2 Linux 上常见的例行性工作2. 仅运行一次的工作排程 2.1 atd 的启动与 at 运行的方式: /etc/at.deny 2.2 实际运行单一工作排程: at, atq & atrm, batch3. 循环运行的例行性工作排程 3.1 使用者的配置: /etc/cron.deny, crontab 3.2 系统的配置档: /etc/crontab 3.3 一些注意事项4. 可唤醒停机期间的工

例行性工作 排程(crontab)

一,什么是例行性工作排程? 计划任务:比如每天,每周,每月,每年或者指定时间需要执行的工作任务 1,Linux工作排程的种类:at,cron a)at :at 处理仅执行一次任务,依赖于atd服务 b)crontab :crontab处理循环的任务, 可循环的时间为分钟.小时.每周.每月或每年等. crontab 除了可以使用指令执行外,也可以编辑 /etc/crontab 来支持. 依赖于crond服务 2,Linux上常见的例行性工作 (1)进行 登录记录的轮询(log rotate) (2

2018-04-19 《鸟哥的Linux私房菜 基础学习篇(第四版)》 第15章 例行性工作排程 笔记

第三版的15章在第四版pdf上看,之后都在第四版pdf上看.第四版和第三版章节号不一样,从此日开始以第四版记录笔记 at新进程都在/var/spool/at/目录下/etc/at.allow/etc/at.deny cron(crond)系统crontab命令/var/spool/cron/"$用户名"    进程文件/etc/crontab        系统进程文件/usr/bin/crontab        crontab命令的执行文件/etc/cron.allow      

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

猫宁!!! 参考:http://cn.linux.vbird.org/linux_basic/0430cron.php 1-今天假设我有一个命令程序,名称为: ping.sh 这个档名!我想要让系统每三分钟运行这个文件一次, 但是偏偏这个文件会有很多的信息显示出来,所以我的 root 帐号每天都会收到差不多四百多封的信件,光是收信就差不多快要疯掉了! 那么请问应该怎么配置比较好呢? 这个涉及数据流重导向的问题,我们可以将他导入文件或者直接丢弃!如果该信息不重要的话, 那么就予以丢弃,如果信息很重

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

定时任务大家都挺说过,就好比你手机上的闹钟,到了指定的时候就会响起. 今天在对redis缓存进行定时储存时又操作了一把,发现一些细节,写的不好.大家就将就看吧, 首先 简单介绍一下linux 例行性工作 两种方式, 主要有两种: at   (和下面一样,只是它只定时执行一次就结束) crontab 演示定时执行php程序将数据插入数据库: 一个案例表:blog 1 CREATE TABLE `blog` ( 2 `blog_id` int(10) unsigned NOT NULL AUTO_I

Linux:例行性工作

什么是例行性工作? 其实对于例行性工作而言就是在当前环境下周期性进行的必须工作. 在Linux下,有2种例行性工作种类: 一种是突发性,做完以后就没有的那种 at:at是个可以处理仅执行一次就结束调度的命令,不过要执行at,必须要有atd这个服务. 在某些Linux版本中这个服务项目不是默认开启的,所以我们需要对这个服务进行开启. 另外一种是例行性的,就是每隔一定的周期要来办的事项: crontab:crontab这个命令锁设置的工作将会循环一直进行下去.可循环的时间为分钟.小时.每周.每月或每