12.例行性工作

时间:2022-08-07 22:50:03

一. 例行性工作

1.Linux 工作调度的种类: at, cron

  两种工作排程的方式:

一种是例行性的,就是每隔一定的周期要来办的事项;

一种是突发性的,就是这次做完以后就没有的那一种

at at 是个可以处理仅运行一次就结束排程的命令,不过要运行 at 时, 必须要有 atd 这个服务 (第十八章) 的支持才行。

crontab crontab 这个命令所配置的工作将会循环的一直进行下去! 可循环的时间为分钟、小时、每周、每月或每年等。

 

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

(1)进行日志文件的轮替 (log rotate)

(2)日志文件分析 logwatch 的任务:

(3)新建 locate 的数据库:

(4)whatis 数据库的创建:

(5)RPM 软件日志文件的建立:

(6)删除临时文件:

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

 

二.仅执行一次的工作调度

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

[root@www ~]# /etc/init.d/atd restart

正在停止 atd:                          [  确定  ]

正在启动 atd:                          [  确定  ] 

# 再配置一下启动时就启动这个服务,免得每次重新启动都得再来一次!

[root@www ~]# chkconfig atd on

 

2. at 的运行方式

使用 at 这个命令来产生所要运行的工作,并将这个工作以文字档的方式写入 /var/spool/at/ 目录内,该工作便能等待 atd 这个服务的取用与运行

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 这个命令。

 

3. 实际运行单一工作调度

[root@www ~]# at [-mldv] TIME

[root@www ~]# at -c 工作号码

选项与参数:

-m  :当 at 的工作完成后,即使没有输出信息,亦以 email 通知使用者该工作已完成。

-l  at -l 相当於 atq,列出目前系统上面的所有该使用者的 at 排程;

-d  at -d 相当於 atrm ,可以取消一个在 at 排程中的工作;

-v  :可以使用较明显的时间格式列出 at 排程中的工作列表;

-c  :可以列出后面接的该项工作的实际命令内容。

 

.循环运行的例行性工作调度

1.使用者的设置

使用的限制数据有:

/etc/cron.allow

将可以使用 crontab 的帐号写入其中,若不在这个文件内的使用者则不可使用 crontab

/etc/cron.deny

将不可以使用 crontab 的帐号写入其中,若未记录到这个文件当中的使用者,就可以使用 crontab

 

2.当使用者使用 crontab 这个命令来创建工作排程之后,该项工作就会被纪录到 /var/spool/cron/ 里面去了,而且是以帐号来作为判别。注意,不要使用 vi 直接编辑该文件, 因为可能由於输入语法错误,会导致无法运行 cron

 

3.crontab 的语法

[root@www ~]# crontab [-u username] [-l|-e|-r]

选项与参数:

-u  :只有 root 才能进行这个任务,亦即帮其他使用者创建/移除 crontab 工作排程;

-e  :编辑 crontab 的工作内容

-l  :查阅 crontab 的工作内容

-r  :移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 去编辑。

 

特殊字符

代表意义

*(星号)

代表任何时刻都接受的意思!举例来说,范例一内那个日、月、周都是 * , 就代表著『不论何月、何日的礼拜几的 12:00 都运行后续命令』的意思!

,(逗号)

代表分隔时段的意思。举例来说,如果要下达的工作是 3:00 与 6:00 时,就会是:

0 3,6 * * * command

时间参数还是有五栏,不过第二栏是 3,6 ,代表 3 与 6 都适用!

-(减号)

代表一段时间范围内,举例来说, 8 点到 12 点之间的每小时的 20 分都进行一项工作:

20 8-12 * * * command

仔细看到第二栏变成 8-12 喔!代表 8,9,10,11,12 都适用的意思!

/n(斜线)

那个 n 代表数字,亦即是『每隔 n 单位间隔』的意思,例如每五分钟进行一次,则:

*/5 * * * * command

很简单吧!用 * 与 /5 来搭配,也可以写成 0-59/5 ,相同意思!

 

4. 系统的配置文件: /etc/crontab

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

5. 注意事项

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

(2)取消不要的输出项目

(3)安全的检验

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

 

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

1、什么是 anacron

anacron 并不是用来取代 crontab 的,anacron 存在的目的就在于我们上头提到的,在处理非 24 小时一直启动的 Linux 系统的 crontab 的执行。anacron 运行的时间通常有两个,一个是系统启动期间运行,一个是写入 crontab 的排程中


2.anacron /etc/anacrontab

1anacron 的语法如下:

[root@www ~]# anacron [-sfn] [job]..

[root@www ~]# anacron -u [job]..

选项与参数:

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

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

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

-u  :仅升级时间记录档的时间戳记,不进行任何工作。

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

 

2/etc/anacrontab 的内容:

[root@www ~]# cat /etc/anacrontab

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

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

# 天数单位为天;延迟时间单位为分钟;工作名称定义可自订;

# 命令串则通常与 crontab 的配置相同

 

3anacron 若下达『 anacron -s cron.daily 』时,他会这样运行:

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

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

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

4.若准备进行命令,根据 /etc/anacrontab 的配置,将延迟 65 分钟

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

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