一. 例行性工作
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
(1)anacron 的语法如下:
[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 的配置相同
(3)anacron 若下达『 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 程序结束。