例行性工作 排程(crontab)

一,什么是例行性工作排程?

计划任务:比如每天,每周,每月,每年或者指定时间需要执行的工作任务

1,Linux工作排程的种类:at,cron

a)at :at 处理仅执行一次任务,依赖于atd服务

b)crontab :crontab处理循环的任务, 可循环的时间为分钟、小时、每周、每月或每年等。 crontab 除了可以使用指令执行外,也可以编辑 /etc/crontab 来支持。 依赖于crond服务

2,Linux上常见的例行性工作

(1)进行 登录记录的轮询(log rotate)

(2)登录文件分析logwatch的任务

(3)建立locate数据库

(4)whatis数据库建立

(5)RPM软件登录文件的建立

(6)移除暂存档,tmpwatch指令来删除暂存档

(7)与网络服务有关的分析行为

二、仅执行一次的工作排程

1,atd的启动与at运行的方式

(1)atd启动

# yum安装atd服务

yum install -y at

# 启动atd服务

/etc/init.d/atd restart

# 设置开机启动项

chkconfig atd on

(2)at运行流程

a)at指令编写要进行的任务

b)将任务以文本方式写入/vat/spool/at目录内

c)该任务就可以等待atd服务调用和执行

(3)at的安全限制

利用/etc/at.allow和/etc/at.deny俩个文件限制可以进行at的使用

a)先查询/etc/at.allow文件,如果有才能使用at,否则不能使用at(即使没有写在at.deny中)

b)如果/etc/at.allow不存在,就寻找/etc/at.deny这个文件,若写在这个at.deny的使用者则不能使用at,而没有在这个at.deny文件中的使用者,就可以使用at

c)如果这俩个文件都不存在,那么只有root可以使用 at这个指令

2,实际运行单一工作排程

(1)语法:

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   在今日的 HH:MM 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此工作 ex> 04:00

HH:MM YYYY-MM-DD  强制指定时间进行执行任务  ex> 04:00 2016-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

(2)at管理

atq

atrm [jobnumber]

(3)例子:

a)再过五分钟后,将 /root/.bashrc 寄给 root 自己

at now + 5 minutes

at> /bin/mail root -s "testing at job" < /root/.bashrc

at> <EOT>

job 4 at 2016-03-17 15:38

# 上面这行信息在说明,第 4 个 at 工作将在 2016/03/17 的 15:38 执行任务

b)将上面的第 4 项工作内容列出来查看

at -c 4

#!/bin/sh

# atrun uid=0 gid=0

# mail root 0

umask 22

(4)常用环境

a)脱机继续工作的任务

b)用于突发状况,

(5)batch:系统有空时才进行背景任务(会在 CPU 工作负载小于 0.8 的时)

使用方式和at一样

三,循环执行的例行性 工作排程

1,使用者的设置

使用者想要建立循环型工作排程时,使用的是 crontab 命令;

限制使用 crontab 的使用者账号:

/etc/cron.allow:将可以使用 crontab 的账号写入其中,若不在则不能使用 crontab;

/etc/cron.deny:记录不可以使用 crontab 的账号,若未记录、就可以使用crontab 。

说明:

当用户使用crontab创建计划任务后,会被记录到/var/spool/cron里面,以用户名创建文件。

例如,test用户使用crontab后,工作会 被记录到/var/spool/cron/test里

cron执行的计划任务会 记录到 /var/log/cron日志文件中

2,语法:

crontab [-u username] [-l|-e|-r]

选项不参数:

-u :只有 root 才能执行,即帮其他使用者创建/删除 crontab 计划任务

-e :编辑 crontab 的工作内容

-l :查阅 crontab 的工作内容

-r :删除所有的 crontab计划任务,若仅要删除一项,请用 -e 去编辑。

例如:

# crontab -l

*/5 * * * * /bin/sh /home/maintain/subsistence.sh >/dev/null 2>&1

0 2 * * * /usr/sbin/ntpdate -u clepsydra.dec.com tick.ucla.edu ntp.nasa.gov

代表意义 分钟 小时 日期 月份 命令
数字范围 0-59 0-23 1-31 1-12 0-7(0和7都为星期日) command

说明 :

特殊字符 代表意义
*(星号) 任何时刻
,(逗号) 代表分隔时段。如计划任务是3:00和6:00时,就会是:0 3,6 * * * command
-(减号) 代表一段时间范围内,如8点到12点之间的每小时的20分执行,20 8-12 * * * command
/n(斜线) 每隔n单位间隔,例如每五分钟执行一次,则:*/5 * * * * command   也可以写成 0-59/5

3,系统的配置文件: /etc/crontab

crontab -e是针对使用者的cron

/etc/crontab 是对系统的例行性任务

cron服务最低间隔为分钟,所以cron会每分钟去读取一次/etc/crontab与/var/spool/cron目录

(1)/etc/crontab文件内容

# cat /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

# 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

(2)run-parts脚本内容

# cat /usr/bin/run-parts

#!/bin/bash

# run-parts - concept taken from Debian

# keep going when something fails

set +e

if [ $# -lt 1 ]; then

echo "Usage: run-parts <dir>"

exit 1

fi

if [ ! -d $1 ]; then

echo "Not a directory: $1"

exit 1

fi

# Ignore *~ and *, scripts

for i in $1/*[^~,] ; do

[ -d $i ] && continue

# Don't run *.{rpmsave,rpmorig,rpmnew,swp} scripts

[ "${i%.rpmsave}" != "${i}" ] && continue

[ "${i%.rpmorig}" != "${i}" ] && continue

[ "${i%.rpmnew}" != "${i}" ] && continue

[ "${i%.swp}" != "${i}" ] && continue

[ "${i%,v}" != "${i}" ] && continue

if [ -x $i ]; then

$i 2>&1 | awk -v "progname=$i" \

'progname {

print progname ":\n"

progname="";

}

{ print; }'

fi

done

exit 0

(3)根据run-parts这个script脚本,所以/etc/crontab文件里面支持俩种方式:

a)命令文件:

0 2 * * * /usr/sbin/ntpdate -u clepsydra.dec.com tick.ucla.edu ntp.nasa.gov

b)按照目录:

02 4 * * * root run-parts /etc/cron.daily

4,注意事项

(1)资源分配不均的问题

vi /etc/crontab

1,6,11,16,21,26,31,36,41,46,51,56 * * * * root CMD1

2,7,12,17,22,27,32,37,42,47,52,57 * * * * root CMD2

3,8,13,18,23,28,33,38,43,48,53,58 * * * * root CMD3

4,9,14,19,24,29,34,39,44,49,54,59 * * * * root CMD4

(2)取消不要的输出信息

>/dev/null 2>&1

(3)安全检验,/var/spool/cron

(4)周与日月不可同时存在

(5)尽量使用全路径

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

1,什么是 anacron?

anacron 不是用来取代 crontab 的,anacron 存在的目的是处理非 24 小时一直运行的 Linux 系统的crontab 执行,是以天为单位或者是在开机后立刻进行 anacron 的动作,它会去检查停机期间应该进行但是并没有进行的crontab 务,并将该任务执行一遍后,anacron 就会自动停止。

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

2,anacron 与 /etc/anacrontab

anacron是一个程序并非一个服务,在CentOS中已经进入crontab中

# ll /etc/cron*/*ana*

-rwxr-xr-x 1 root root 379 Mar 28  2007 /etc/cron.daily/0anacron

-rwxr-xr-x 1 root root 381 Mar 28  2007 /etc/cron.monthly/0anacron

-rwxr-xr-x 1 root root 380 Mar 28  2007 /etc/cron.weekly/0anacron

# cat /etc/cron.daily/0anacron

#!/bin/sh

#

# anacron's cron script

#

# This script updates anacron time stamps. It is called through run-parts

# either by anacron itself or by cron.

#

# The script is called "0anacron" to assure that it will be executed

# _before_ all other scripts.

# Don't run anacron if this script is called by anacron.

if [ ! -e /var/run/anacron.pid ]; then

anacron -u cron.daily

fi

3,语法:

anacron [-sfn] [job]..

anacron -u [job]..

选项与参数:

-s :开始一连续的执行各项工作 (job),会依据时间记录文件的数据判断是否进行

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

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

-u :仅更新时间记录文件的时间戳,不进行任何工作。

job :由 /etc/anacrontab 定义的各项工作名称。

# /etc/anacrontab 内容

# cat /etc/anacrontab

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

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

天数  延迟时间 工作名称定义  实际要执行的命令

# more /var/spool/anacron/*

::::::::::::::

/var/spool/anacron/cron.daily

::::::::::::::

20171206

::::::::::::::

/var/spool/anacron/cron.monthly

::::::::::::::

20171201

::::::::::::::

/var/spool/anacron/cron.weekly

::::::::::::::

20171203

3,工作流程

(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

时间: 2024-10-16 10:42:18

例行性工作 排程(crontab)的相关文章

第十六章、例行性工作排程 (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. 可唤醒停机期

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, batch3. 循环运行的例行性工作排程 3.1 使用者的配置: /etc/cron.deny, crontab 3.2 系统的配置档: /etc/crontab 3.3 一些注意事项4. 可唤醒停机期间的工

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

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

linux例行性工作排程

1.例行性排程有两中方式: 1)每隔一定周期就要来办的事项,用crontab指令实现 2)突发性的,就是这次做完后,就没有了用at指令实现,不过这个需要atd服务的支持 2.linux常见的例行性任务有: 1)进行登录档的轮替:linux会将系统所发生的各种信息都记录下来,这就是登录档,随着系统的运行这些登录档会越来越大,导致系统读写效能下降,因此就需要将这些数据按时间的新旧分别存放,这就是登录档的轮替任务 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      

Linux-例行性工作排程

1. 例行性工作排程的种类 一种是例行性的,即每隔一定的周期要执行一次的: 一种是突发性的,即只要做一次就好啦. 为了要达成以上两个功能,就要使用at和crontab这两个指令啦. at : at是处理仅运行一次就结束排程的命令,不过要运行 at,必须要有 atd 这个服务的支持才行,atd 可能默认并没有启动,那么 at 这个命令就会失效. crontab : crontab 这个命令所配置的任务将会循环一直执行,可循环的时间有分钟.小时.每周.每月或每年等.crontab 除了可以使用命令运

ubuntu 使用crontab实现工作排程

Cron是Linux系统中最有用的工具之一,cron作业是在指定时间到来时被调度执行的作业. 最常见的自动化系统管理和自动维护工作,比如每天发出的按计划完成了备份的通知,或者是按计划定时清理/tmp/目录的通知.还有很多Web应用程序也需要执行定时作业.到时间吃饭了发送一封邮件通知你可以吃饭了,通知你比赛开始了等等 Linux 上常见的例行性工作 1.进行登录档的轮替 (log rotate): Linux 会主动的将系统所发生的各种资讯都记录下来,这就是登录档 . 由於系统会一直记录登录资讯,

例行性工作(crontab)

例行性工作使用的是crontab这个命令来进行工作,根据设置将会循环下去,循环的时间从秒到年 crontab的工作调度是由服务crond来控制 1.用户的限制 /etc/cron.deny 将不可以使用crontab的账号写入其中,若未记录,则可以使用crontab 2.当用户使用crontab这个命令来新建工作调度之后,调度内容被记录到/var/spool/cron/里面的账号来识别 3.crontab 语法 crontab   -u username  [-l] [-e]  [-r] -e编