15.1 什么是例行性工作调度
每个人或多或少都有一些约会或者是工作,有的工作是例行性的, 例如每年一次的加薪、每个月一次的工作报告、每周一次的午餐会报、每天需要的打卡等等; 有的工作则是临时发生的,例如刚好总公司有高官来访,需要你准备演讲器材等等! 用在生活上面,例如每年的爱人的生日、每天的起床时间等等、还有突发性的 3C 用品大降价 (啊!真希望天天都有!) 等等啰。
像上面这些例行性工作,通常你得要记录在行事历上面才能避免忘记!不过,由于我们常常在计算机前面的缘故, 如果计算机系统能够主动的通知我们的话,那么不就轻松多了!嘿嘿!这个时候 Linux 的例行性工作调度就可以派上场了! 在不考虑硬件与我们服务器的链接状态下,我们的 Linux 可以帮你提醒很多任务,例如:每一天早上 8:00 钟要服务器连接上音响,并启动音乐来唤你起床;而中午 12:00 希望 Linux 可以发一封信到你的邮件信箱,提醒你可以去吃午餐了; 另外,在每年的你爱人生日的前一天,先发封信提醒你,以免忘记这么重要的一天。
那么 Linux 的例行性工作是如何进行调度的呢?所谓的调度就是将这些工作安排执行的流程之意! 咱们的 Linux 调度就是通过 crontab 与 at 这两个东西!这两个玩意儿有啥异同?就让我们来瞧瞧先!
15.1.1 Linux 工作调度的种类: at, cron
从上面的说明当中,我们可以很清楚的发现两种工作调度的方式:
- 一种是例行性的,就是每隔一定的周期要来办的事项;
- 一种是突发性的,就是这次做完以后就没有的那一种 ( 3C 大降价...)
那么在 Linux 下面如何达到这两个功能呢?那就得使用 at 与 crontab 这两个好东西啰!
at :at 是个可以处理仅执行一次就结束调度的指令,不过要执行 at 时, 必须要有 atd 这个服务 (第十七章) 的支持才行。在某些新版的 distributions 中,atd 可能默认并没有启动,那么 at 这个指令就会失效呢!不过我们的 CentOS 默认是启动的!
crontab :crontab 这个指令所设置的工作将会循环的一直进行下去! 可循环的时间为分钟、小时、每周、每月或每年等。crontab 除了可以使用指令执行外,亦可编辑 /etc/crontab 来支持。 至于让 crontab 可以生效的服务则是 crond 这个服务喔!
下面我们先来谈一谈 Linux 的系统到底在做什么事情,怎么有若干多的工作调度在进行呢?然后再回来谈一谈 at 与 crontab 这两个好东西!
15.1.2 CentOS Linux 系统上常见的例行性工作
如果你曾经使用过 Linux 一阵子了,那么你大概会发现到 Linux 会主动的帮我们进行一些工作呢! 比方说自动的进行线上更新 (on-line update)、自动的进行 updatedb (第六章谈到的 locate 指令) 更新文件名数据库、自动的作登录文件分析 (所以 root 常常会收到标题为 logwatch 的信件) 等等。这是由于系统要正常运行的话, 某些在背景下面的工作必须要定时进行的缘故。基本上 Linux 系统常见的例行性任务有:
进行登录文件的轮替 (log rotate): Linux 会主动的将系统所发生的各种信息都记录下来,这就是登录文件 (第十八章)。 由于系统会一直记录登录信息,所以登录文件将会越来越大!我们知道大型文件不但占容量还会造成读写性能的困扰, 因此适时的将登录文件数据挪一挪,让旧的数据与新的数据分别存放,则比较可以有效的记录登录信息。这就是 log rotate 的任务!这也是系统必要的例行任务;
登录文件分析 logwatch 的任务: 如果系统发生了软件问题、硬件错误、资安问题等,绝大部分的错误信息都会被记录到登录文件中, 因此系统管理员的重要任务之一就是分析登录文件。但你不可能手动通过 vim 等软件去检视登录文件,因为数据太复杂了! 我们的 CentOS 提供了一只程序“ logwatch ”来主动分析登录信息,所以你会发现,你的 root 老是会收到标题为 logwatch 的信件,那是正常的!你最好也能够看看该信件的内容喔!
创建 locate 的数据库: 在第六章我们谈到的 locate 指令时, 我们知道该指令是通过已经存在的文件名数据库来进行系统上文件名的查询。我们的文件名数据库是放置到 /var/lib/mlocate/ 中。 问题是,这个数据库怎么会自动更新啊?嘿嘿!这就是系统的例行性工作所产生的效果啦!系统会主动的进行 updatedb 喔!
man page 查询数据库的创建: 与 locate 数据库类似的,可提供快速查询的 man page db 也是个数据库,但如果要使用 man page 数据库时,就得要执行 mandb 才能够创建好啊! 而这个 man page 数据库也是通过系统的例行性工作调度来自动执行的哩!
RPM 软件登录文件的创建: RPM (第二十二章) 是一种软件管理的机制。由于系统可能会常常变更软件, 包括软件的新安装、非经常性更新等,都会造成软件文件名的差异。为了方便未来追踪,系统也帮我们将文件名作个排序的记录呢! 有时候系统也会通过调度来帮忙 RPM 数据库的重新创建喔!
移除暂存盘: 某些软件在运行中会产生一些暂存盘,但是当这个软件关闭时,这些暂存盘可能并不会主动的被移除。 有些暂存盘则有时间性,如果超过一段时间后,这个暂存盘就没有效用了,此时移除这些暂存盘就是一件重要的工作! 否则磁盘容量会被耗光。系统通过例行性工作调度执行名为 tmpwatch 的指令来删除这些暂存盘呢!
与网络服务有关的分析行为: 如果你有安装类似 WWW 服务器软件 (一个名为 apache 的软件),那么你的 Linux 系统通常就会主动的分析该软件的登录文件。 同时某些凭证与认证的网络信息是否过期的问题,我们的 Linux 系统也会很友好的帮你进行自动检查!
其实你的系统会进行的例行性工作与你安装的软件多寡有关,如果你安装过多的软件,某些服务功能的软件都会附上分析工具, 那么你的系统就会多出一些例行性工作啰!像鸟哥的主机还多加了很多自己撰写的分析工具,以及其他第三方协力软件的分析软件, 嘿嘿!俺的 Linux 工作量可是非常大的哩!因为有这么多的工作需要进行,所以我们当然得要了解例行性工作的处理方式啰!